如何用curl请求Azure AD提交Kerberos Token获取授权码
如何通过Kerberos Token向Azure AD获取授权码
前提条件
- 你的Azure AD应用必须已启用集成Windows认证(IWA)(在应用注册门户的「认证」→「高级设置」中开启)
- 请求发起者需为Azure AD托管域内的用户(或已加入域的设备)
- 已在应用注册中配置有效的
redirect_uri
步骤1:触发Kerberos协商挑战
首先向Azure AD授权端点发送完整的OAuth2授权请求,此时不带Kerberos Token。若应用配置正确,Azure AD会返回WWW-Authenticate: Negotiate响应头,而非登录页HTML。
请求必须包含以下核心参数:
client_id:你的应用注册IDresponse_type=code:指定返回授权码redirect_uri:已注册的回调URLscope:所需权限范围(例如openid offline_access)state:防CSRF的随机字符串
curl示例(仅作逻辑参考):
curl -v "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize?client_id={your-client-id}&response_type=code&redirect_uri={your-redirect-uri}&scope=openid%20offline_access&state={random-state}"
如果仍返回登录页,需检查:应用是否开启IWA、用户是否属于目标域、redirect_uri是否已正确注册。
步骤2:携带Kerberos Token发送请求
拿到Negotiate挑战后,将Base64编码的Kerberos Token放入Authorization头,再次发送相同的授权请求:
curl示例(仅作逻辑参考):
curl -v -H "Authorization: Negotiate {base64-encoded-kerberos-token}" "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize?client_id={your-client-id}&response_type=code&redirect_uri={your-redirect-uri}&scope=openid%20offline_access&state={random-state}"
验证通过后,Azure AD会重定向到你指定的redirect_uri,并在URL参数中返回code(授权码)。
关键注意事项
- Azure AD的授权端点要求完整的OAuth2参数,不能仅发送简单请求,必须包含所有必要的授权参数才能触发Kerberos认证流程
- Kerberos Token必须是针对Azure AD服务主体(
HTTP/login.microsoftonline.com)的有效服务票据 - 若请求缺少核心参数,Azure AD会直接返回登录页,不会触发Negotiate挑战
内容的提问来源于stack exchange,提问作者Vaccano
相关产品推荐
相关产品推荐

