我有一个作为 Azure 应用服务托管的 Web 应用,我正在尝试将其授权给也作为 Azure 应用服务托管的 API。我已经注册了应用程序和 API,配置了单租户 AD 身份验证,授权了客户端应用程序,并成功获取了不记名 token 。但是,当我尝试访问资源时,我收到 401 错误。
我已经尝试使用委派角色和应用程序角色进行此操作,但没有效果。
编辑:这是我用来在网络应用程序中获取 token 的代码:
var confidentialClient = ConfidentialClientApplicationBuilder.Create(<clientId>)
.WithCertificate(<certificate>)
.WithAuthority(<authority>)
.Build();
await app.AcquireTokenForClient(new string[] { "api://<app_id>/.default" });
编辑:解析 JWT token 后,我确认应用程序角色存在;但范围并非如此。看来这不应该是一个问题。
我可以采取哪些步骤来尝试诊断此身份验证问题?
最佳答案
请检查用于调用 Web API 的 token 。如果颁发者有 v2 端点,则将“ accessTokenAcceptedVersion
”从 null 更改为 2,否则保留 null or 1
.
list 在 azure 广告门户中。
并确保管理员在身份验证期间或通过门户授予管理员同意范围:
- 401 错误 通常由于受众不匹配而发生。请检查
allowed audiences
参数来自https://resources.azure.com/ . - 导航到您的应用服务资源 > config > authsettings 并 将AllowAudiences 值正确设置为有效值。
- 受众应该是应用程序的客户端 ID 或应用程序 ID URI。它用于 检查收到的 token 是否适用于您尝试调用的 API。
- 应用程序的 AppIdUri 可以采用以下形式:
api://<target_app_id>
或"https://<site>.azurewebsites.net"
以及clientIId
应用程序。
授权设置:
"allowedAudiences":[
https://<webapp_name>.azurewebsites.net/,
api://<target_app_id>,
client_id
]
也尝试上面,通过删除 api://前缀来检查范围
关于azure - 无法从 Azure Web 应用程序 Azure AD 身份验证向 Azure API 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73776199/