php如何处理401状态码,完成Digest realm授权认证闭环?
发布于 作者:苏南大叔 来源:程序如此灵动~

401
认证就是从服务器端发出一个401
状态码,然后由客户端浏览器来处理登录框的问题。但是,服务器端能够自定义登录的认证方式为realm
,还是digest realm
。整体上来说,两者的区别就是数据加密方式的不同,而这件事情对于用户来说,无感。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文讨论以php
的方式,如何完成“digest realm”的认证闭环?测试环境:win10
,nginx@1.15.11
,php@8.2.9nts
,chrome@121.0.6167.140
。
发出401状态[digest]
nginx
/apache
等,可以发出401
状态,php
/java
等服务器端语言也可以发出401
状态码。本文以php
方法发出digest
认证方式请求。代码如下:

发送的数据
客户端浏览器发生的认证数据,就是客户端传递的header
里面的Authorization
。它可以使用php
的$_SERVER['PHP_AUTH_DIGEST']
进行获取。
本文的实际传递的header
值是:

分解认证数据
digest realm
方式比realm
方式先进的地方就是:无法分解处理密码明文。只能拿到:
username
,用户名。uri
,发出认证的页面地址。response
,各种组合后的md5
密文。- 其它未知参数,
nonce
/nc
/cnonce
/qop
这里的参数$auth_digest
,经过函数处理后,得到的值是:
鉴权认证
由于这个Digest realm
比realm
先进的地方,就是拿不到明文的密码。而是有个算法获得了个特殊组装的md5
值,来替代了密码的作用。所以,这个替代密码的response
的值,就显得很重要。
完整代码
这里是苏南大叔修改的官方例子,欢迎指正:
这是付费可看内容,收费5元。
相关文章
- https://newsn.net/say/electron-401.html
- https://newsn.net/say/nginx-401.html
- https://newsn.net/say/php-401.html
总结
更多php
相关经验文章,请点击苏南大叔的博客:


