关于basic认证和digest认证的初步理解

43 篇文章 0 订阅

1.  basic认证是把用户和密码通过base64加密后发送给服务器进行验证

2.  digest认证则是把服务器响应的401消息里面的特定的值和用户名以及密码结合起来进行不可逆的摘要算法运算得到一个值,然后把用户名和这个摘要值发给服务器,服务通过用户名去 在自己本地找到对应的密码,然后进行同样的摘要运算,再比较这个值是否和客户端发过来的摘要值一样。

TTP协议规范的另一种认证模式是Digest模式,在HTTP1.1时被提出来,它主要是为了解决Basic模式安全问题,用于替代原来的Basic认证模式,Digest认证也是采用challenge/response认证模式,基本的认证流程比较类似,整个过程如下:

①浏览器发送http报文请求一个受保护的资源。

②服务端的web容器将http响应报文的响应码设为401,响应头部比Basic模式复杂,WWW-Authenticate: Digest realm=”myTomcat”,qop="auth",nonce="xxxxxxxxxxx",opaque="xxxxxxxx" 。其中qop的auth表示鉴别方式;nonce是随机字符串;opaque服务端指定的值,客户端需要原值返回。

③浏览器弹出对话框让用户输入用户名和密码,浏览器对用户名、密码、nonce值、HTTP请求方法、被请求资源URI等组合后进行MD5运算,把计算得到的摘要信息发送给服务端。请求头部类似如下,Authorization: Digest username="xxxxx",realm="myTomcat",qop="auth",nonce="xxxxx",uri="xxxx",cnonce="xxxxxx",nc=00000001,response="xxxxxxxxx",opaque="xxxxxxxxx" 。其中username是用户名;cnonce是客户端生成的随机字符串;nc是运行认证的次数;response就是最终计算得到的摘要。

④服务端web容器获取HTTP报文头部相关认证信息,从中获取到username,根据username获取对应的密码,同样对用户名、密码、nonce值、HTTP请求方法、被请求资源URI等组合进行MD5运算,计算结果和response进行比较,如果匹配则认证成功并返回相关资源,否则再执行②,重新进行认证。

⑤以后每次访问都要带上认证头部。

其实通过哈希算法对通信双方身份的认证十分常见,它的好处就是不必把具备密码的信息对外传输,只需将这些密码信息加入一个对方给定的随机值计算哈希值,最后将哈希值传给对方,对方就可以认证你的身份。Digest思想同样采如此,用了一种nonce随机数字符串,双方约好对哪些信息进行哈希运算即可完成双方身份的验证。Digest模式避免了密码在网络上明文传输,提高了安全性,但它仍然存在缺点,例如认证报文被攻击者拦截到攻击者可以获取到资源

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
axios是一个基于Promise的HTTP客户端,可以用于发送网络请求。它支持多种认证方式,包括基本认证、摘要认证等。 在使用axios进行digest认证时,需要先配置axios的请求头Authorization字段。在每个请求中,将用户名、密码进行摘要算法处理,然后放入请求头Authorization字段中,以完成digest认证。 以下是使用axios进行digest认证的步骤: 1. 导入axios库,并创建一个axios实例: ```javascript import axios from 'axios'; const instance = axios.create({ // 配置其他axios参数 }); ``` 2. 添加请求拦截器: ```javascript instance.interceptors.request.use( (config) => { // 在请求前对config进行处理 const username = 'your_username'; const password = 'your_password'; const auth = 'Digest ' + btoa(username + ':' + password); config.headers.Authorization = auth; return config; }, (error) => { return Promise.reject(error); } ); ``` 3. 发送请求: ```javascript instance .get('your_url') .then((response) => { // 处理响应成功的情况 console.log(response.data); }) .catch((error) => { // 处理响应失败的情况 console.error(error); }); ``` 在请求拦截器中,我们使用了btoa函数对用户名和密码进行Base64编码,然后将其拼接为“Digest 用户名:密码”的形式。最后将编码后的字符串添加到请求头Authorization字段中。 通过以上步骤,我们可以使用axios进行digest认证,发送带有认证信息的请求。当然,在实际应用中,需要根据具体的后端要求和网络环境进行详细配置和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值