You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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:你的应用注册ID
  • response_type=code:指定返回授权码
  • redirect_uri:已注册的回调URL
  • scope:所需权限范围(例如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:01:32