如何使用Refresh Token获取有效的OAuth2 AccessToken(Azure AD场景)
解决Azure AD刷新令牌获取指定受众AccessToken的问题
改用
scope参数替代resource参数
Azure AD v2.0端点不再推荐使用resource参数,尤其是自定义范围的API场景。刷新令牌时,直接传入完整的自定义范围(如api://{clientId}/ApplicationName)加上offline_access,无需设置resource,返回的AccessToken受众会自动匹配api://{clientId}。确认使用v2.0令牌端点
刷新请求必须指向Azure AD v2.0端点:https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token。v1.0端点的resource参数逻辑与v2.0不兼容,无法正确适配自定义范围的权限请求。验证刷新令牌的权限关联
确保初始授权码流请求时,已包含目标自定义范围和offline_access权限。只有满足这个前提,Refresh Token才具备获取对应API新AccessToken的权限。参考请求示例
curl -X POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id={你的客户端ID}" \ -d "client_secret={你的客户端密钥}" \ -d "refresh_token={已获取的刷新令牌}" \ -d "grant_type=refresh_token" \ -d "scope=api://{clientId}/ApplicationName offline_access"
额外检查点:
确认你的App Registration中,API的「Expose an API」页面里,自定义范围已启用,且当前WebApi应用已被授予该范围的权限。
内容的提问来源于stack exchange,提问作者mateuszwdowiak
相关产品推荐
相关产品推荐

