本帖最后由 cattenlinger 于 2026-8-4 19:28 编辑
Challenge 之喻
想象一下顺应挚友邀约进入高档写字楼,被门口的闸机拦住了…… 嗯,这就是 Challenge:你尝试直接达成目的,却又被额外的原因阻拦了。
这个“挑战者”可以是任何存在:保安、闸机、门禁系统,甚至是路过盘查的警察。
何为 Challenge?
虽说认证 (Authentication) 和授权 (Authorization) 是两个概念,但只要管守资源的流程中对其中一个不确定,系统开发者便可以插入 Challenge,以要求更详细的信息。
在对服务器发起 HTTP 请求,尝试访问受保护资源时,若无法确认是否有权限,安全措施便会拒绝请求。而一些更人性化的设计,会在拒绝时附上一段信息:
WWW-Authenticate: Basic realm="Protected Resource"
礼貌的服务器君:这位客人,在下无法确认您的要求合理性,若您要继续,请出示关于您能访问 Protected Resource 的 Basic 令牌以作证明。
作为尊贵客人的您,拿出朋友提前准备好的神奇咒语,附在新的要求上:
Authorization: Basic c2VuYmFpOjExNDUxNDE5MTk4MTA
这两个 HTTP 字段的交换,便是浏览器原生用户名密码弹窗登陆时所发生的事情,例如访问一些路由器的 HTTP 后台时。
当然,大多数情况下,浏览器环境下的人机交互为了更加自由的信息呈现,都会使用另外的方式来实现人类友好的 Challenge:使用各种各样装饰的登陆网页、SSO (Single Sign-On),甚至扫描机器可读码登录。
通过标准 HTTP 头的传递,更多是为了在方便自动化的同时,让人类有在意外/例外情况下介入的机会。
延伸参考
|