Azure中代表用户获取API令牌的合法授权类型咨询
解决Azure AD On-Behalf-Of流程中的
unsupported_grant_type错误 嘿,我一眼就揪出问题根源了——你的grant_type参数值末尾多了个不必要的句号!你写的是urn:ietf:params:oauth:grant-type:jwt-bearer.,正确的合法授权类型应该是urn:ietf:params:oauth:grant-type:jwt-bearer(去掉最后的点)。
另外,你的请求参数还有几处格式小问题需要修正,下面是完整的正确请求示例:
正确的请求格式(application/x-www-form-urlencoded)
发送到oauth2/token端点的POST请求参数应该是这样的:
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer client_id=<你的API应用客户端ID> client_secret=<你的API应用客户端密钥> resource=<你的API应用的URI> requested_token_use=on_behalf_of scope=openid assertion=<从SPA获取的Graph用户令牌>
几个关键注意点
- 务必确保
grant_type没有多余标点,这是触发AADSTS70003错误的直接原因 - 你的请求里
client_secret写了client_secret : <client_secret>>,多了一个>,记得删掉 - 提前确认你的API应用在Azure AD中已经配置允许On-Behalf-Of流程,并且已获取到必要的权限(比如访问Graph API的权限)
- 作为
assertion的Graph用户令牌必须是有效、未过期的,且令牌的受众(aud)必须指向Graph API,同时颁发者(iss)和签名能通过Azure AD的校验
修正这些问题后重新发送请求,应该就能成功获取到访问API应用的令牌了。如果还有其他错误,可以根据返回的错误代码排查——比如AADSTS50013表示令牌无效,AADSTS65001表示权限不足等。
内容的提问来源于stack exchange,提问作者Subburaj
相关产品推荐
相关产品推荐

