我有一个Blazor WASM Azure静态Web应用程序,它与运行在ASP.NET核心上的Azure AD保护API通信。我设置了Microsoft帐户和一次性密码IDP。
我可以登录并调用我的API上受保护的端点(只有在登录时),直到我有了第一个不在租户中的Microsoft帐户。他们得到了AADSTS50020。适用于我的唯一原因是原因2(使用了错误的端点),所以我根据帮助页面和this documentation将我的权限从https://login.microsoftonline.com/<YourTenantNameOrID>
更改为https://login.microsoftonline.com/common
。
现在每个用户都可以签名,但我们在受保护的端点上都得到了401未经授权。
- WWW验证**标头设置为
Bearer error="invalid_token", error_description="The signature is invalid"
。
- WWW验证**标头设置为
如果一个简单的更改导致所有内容都崩溃,我显然还没有"尝试所有内容",但在过去的几天里,我仔细阅读了文档,但没有任何效果。
注:
- 一次性密码登录选项消失了,我的主MS帐户从来没有自动建议,即使我每次都使用它。
- 我的令牌"看起来"很好,
aud
是API客户端ID,scp
中存在1个必要的作用域。
API清单
...
"oauth2AllowIdTokenImplicitFlow": true,
"oauth2AllowImplicitFlow": false,
...
"oauth2Permissions": [
{
"adminConsentDescription": "Allows the app to access the web API on behalf of the signed-in user",
"adminConsentDisplayName": "Access the API on behalf of a user",
"id": "<access_as_user scope id>",
"isEnabled": true,
"lang": null,
"origin": "Application",
"type": "User",
"userConsentDescription": "Allows this app to access the web API on your behalf",
"userConsentDisplayName": "Access the API on your behalf",
"value": "access_as_user"
}
],
...
"signInAudience": "AzureADandPersonalMicrosoftAccount",
...
客户端清单
...
"oauth2AllowIdTokenImplicitFlow": true,
"oauth2AllowImplicitFlow": true,
...
"requiredResourceAccess": [
...
{
"resourceAppId": "<api client id>",
"resourceAccess": [
{
"id": "<access_as_user scope id>",
"type": "Scope"
}
]
}
],
...
"signInAudience": "AzureADandPersonalMicrosoftAccount",
...
我可以提供其他信息,比如配置代码,但是我不想让这个问题太长。
1条答案
按热度按时间vjrehmav1#
好吧,在帮助板上发帖后不久找到答案的规则相对于在帮助板上发帖前搜索答案所花的时间是至高无上的。
对于任何有同样问题的人,我的API上的
TenantId
配置被设置为我的实际租户ID。即使您的客户端从common
端点请求令牌,您的API也需要将租户设置为common
。查看更多:https://learn.microsoft.com/en-us/azure/active-directory/develop/scenario-protected-web-api-app-configuration