13397158231   jevian_ma@worldflying.cn

http digest认证

2019-06-01 13:29:56

首先确认http的返回code,200是正常返回,401代表认证不通过。因此,当收到401请求后,就需要进行认证流程了。

首先获取收到401请求的返回中,返回头部的Www-Authenticate字段的值。

这个值是由若干个key=value结构组成,通过逗号分割的,其中opaque字段可能有,也可能没有,如下所示:

realm=12345,nonce=67890,opaque=abcde

收到这三个参数后,需要准备几个数据

nonce,就是服务器直接返回的数据

ha1 = Md5(hkuser + ":" + realm + ":" + hkpass)

hkuser,hkpass是账号密码

ha2 = Md5(method + ":" + url)

method是请求类型,如:GET,POST,PUT,DELETE,url为当前的请求链接,不包括域名。

如果请求链接为https://www.worldflying.cn/iot.html,那么url就是/iot.html

nc,是当前的请求类型(method)的第几次请求,使用8位16进制显示,如第10次请求就为0000000a

cnonce,这个是一个8位随机字符串,可包含数字与小写字母。

然后将上面的数据合成

response = Md5(ha1 + ":" + nonce + ":" + nc + ":" + cnonce + ":auth:" + ha2)

authorization = "Digest username=\"" + hkuser + "\",realm=\"" + realm + "\",nonce=\"" + nonce + "\",uri=\"" + url + "\",qop=auth,nc=" + nc + ",cnonce=\"" + cnonce + "\",response=\"" + response + "\"" + "\",opaque=\"" + opaque + "\""

注意最后一个参数就是服务器返回的opaque,如果服务器不返回opaque,这里你不要添加这个字段。

最后通过req.Header.Add("Authorization", authorization)方法添加到下次请求的头部,然后发出请求即可。


作者:沃航科技

优秀产品推荐:可编程网络IO控制器

上一篇:ueditor给超链接默认添加rel="nofollow"标签

下一篇:深入理解vue中的slot与slot-scope

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务