微软浏览器身份验证全流程、授权码使用及本地流量防窃听咨询
授权码的具体使用逻辑
你梳理的流程中未知的环节属于OAuth 2.0 授权码流程的标准令牌交换步骤,完整逻辑如下:
- 执行
az login等操作时,本地应用会先生成一对PKCE(公开客户端授权码交换证明)参数:随机字符串code_verifier,以及由code_verifier经过哈希运算得到的code_challenge - 请求授权端点时,本地应用会将
code_challenge和对应的哈希算法参数一并携带发送,微软身份平台会记录这两个参数 - 拿到浏览器返回的授权码后,本地应用会主动向微软令牌端点发起POST请求,携带的参数包括:获取到的授权码、之前生成的原始
code_verifier、固定的客户端ID、和授权请求时完全一致的redirect_uri - 微软身份平台会先校验
code_verifier和之前记录的code_challenge是否匹配,校验通过后才会返回有效访问令牌、刷新令牌,授权码本身仅可使用一次,校验后直接作废,不会作为访问凭证直接使用
防范localhost流量窃听的机制
针对localhost流量可被本地抓包获取的风险,该流程有多重防护机制:
- 授权码单次有效+短有效期:授权码的有效期通常仅为几分钟,且仅可用于一次令牌交换请求,使用后立即作废,即使被抓包获取也无法二次使用
- PKCE机制阻断授权码盗用:换令牌必须的
code_verifier仅存在于本地应用的内存中,全程不会经过任何网络传输,窃听者就算拿到了授权码,没有对应的code_verifier也无法完成令牌交换 - Redirect_uri严格校验:微软身份平台会校验令牌交换请求携带的
redirect_uri和发起授权请求时的redirect_uri完全一致,加上本地服务使用随机端口,窃听者无法提前构造合法的请求参数 - 本地服务仅监听环回地址:应用启动的临时HTTP服务仅绑定127.0.0.1/::1地址,外部设备无法访问,仅能接收本地浏览器返回的授权码请求
内容的提问来源于stack exchange,提问作者tmaj
相关产品推荐
相关产品推荐

