兑换授权码时持续触发AADSTS70008错误排查求助
排查AADSTS70008错误及API调用401问题
针对你遇到的AADSTS70008授权码兑换失败,以及之前令牌调用API返回401的问题,按以下方向排查配置:
重定向URI配置校验
确认你在获取授权码时用的http://localhost,已经准确添加到客户端应用(即client-id-of-api-that-needs-to-call-other-api对应的应用)的认证 > 重定向URI列表中,且类型选择为「Web」。注意URI的大小写、末尾斜杠等细节必须完全匹配,否则授权码会被判定无效。API权限配置校验
- 被调用的API(
client-id-of-api-that-will-be-called-by-first-api对应的应用)需已暴露user_impersonation权限,且在「API权限 > 已公开的API」中该权限状态为已启用。 - 客户端应用需已获得该权限的授权:
- 如果
user_impersonation是用户级权限,需确保你登录的用户已同意该权限; - 如果是管理员级权限,必须由租户管理员在客户端应用的「API权限」页面点击「授予管理员同意」,否则用户个人同意无效。
- 如果
- 被调用的API(
授权码兑换请求参数校验
兑换授权码时必须保证:client_id与获取授权码时的完全一致;redirect_uri与获取授权码时的完全一致;- 若客户端应用是Web应用/机密客户端,必须在兑换请求中携带正确的
client_secret;若为桌面/公共客户端,则不能携带client_secret,同时需确保客户端应用的「认证 > 允许的令牌颁发者」配置正确。
令牌受众(Audience)校验
之前获取令牌但调用API返回401,大概率是令牌的aud(受众)字段不匹配被调用API的标识符。你可以用jwt.ms解析令牌,确认aud值是否为api://<client-id-of-api-that-will-be-called-by-first-api>,如果不是,说明获取授权码时的scope参数有误,需确保scope严格指向被调用API的权限。授权码有效性校验
授权码是一次性使用的,若你之前用过同一个授权码兑换令牌,再次使用会直接触发AADSTS70008错误。每次兑换都必须重新通过授权URL获取新的授权码。
内容的提问来源于stack exchange,提问作者Andrea Scarcella
相关产品推荐
相关产品推荐

