我正在尝试使用Azure AD B2C保护Web API,但是当我尝试使用“运行用户流”获取的令牌访问端点时,会出现以下异常:
System.UnauthorizedAccessException:IDW10201:在承载令牌中未找到范围或角色声明。
我的代码:
我创建了一个新的ASP.NET Core应用程序,并使用对话框自动添加身份验证。
代码中一些有趣的点:
我尝试将以下内容添加到appsettings.json文件中,但没有帮助:
"AllowWebApiToBeAuthorizedByACL": true
我尝试将这段代码从控制器中删除,但没有帮助:
// The Web API will only accept tokens 1) for users, and 2) having the "access_as_user" scope for this API
static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };
HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);
在ConfigureServices方法中,我有以下代码:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAdB2C"));
Azure门户:
我创建了一个新的Azure AD B2C租户。
我注册了一个应用程序。
- API权限
在这里,我已经对它进行了很多探索,这些是我现在启用的权限:
- 创建用户流程
然后当我运行用户流程时,这就是我得到的结果:
使用的链接:
https://xxxxxxxxxxx001.b2clogin.com/xxxxxxxxx001.onmicrosoft.com/oauth2/v2.0/authorize?
p=B2C_1_user_flow_test_signinsignup
&client_id=xxxxxxxxxxxx
&nonce=defaultNonce
&redirect_uri=https%3A%2F%2Fjwt.ms
&scope=openid
&response_type=id_token
&prompt=login
我完全是新手,在研究了整个互联网之后,仍然无法弄清楚问题所在,以及为什么在从Azure门户提供的链接运行用户流程时,获得的令牌中没有scp。
如果您能帮忙找出我设置不正确或遗漏的部分,我将不胜感激。