我有一个使用 ASP.NET Core 构建的 Web API。我有一个将调用此 API 的 React 应用程序。使用 AAD B2C 管理身份。我遇到了 API 无法识别应用程序生成的不记名 token 的问题。
我确信这与我的设置有关,因为 token 本身具有我需要的所有声明(由 JWT.io 解码)。但是,当我通过 .NET Core 中的代码传递它以允许授权时,ClaimsIdentity 没有任何内容,也不包含用户信息。
我使用以下代码行设置实例:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
configuration.Bind("AzureAdClient", options);
options.TokenValidationParameters.NameClaimType = "name";
}, options => { configuration.Bind("AzureAdClient", options); });
我还有以下配置:
"AzureAdClient": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "somename.onmicrosoft.com",
"ClientId": "guid here",
"TenantId": "guid here",
"Audience": "https://somename.onmicrosoft.com/tenants-api",
"SignUpSignInPolicyId": "B2C_1_RwSignIn"
}
我在这里做错了什么吗?
最佳答案
我能够使用不同的策略来解决这个问题。大多数示例中推荐的配置仍然不起作用。
- 实例:https://yourname.b2clogin.com
- 域名:yourname.onmicrosoft.com
- SignUpSignInPolicyId:实际名称 您的注册/登录政策
- ClientId:API 客户端的客户端 ID。
var section = configuration.GetSection("AzureAdClient");
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = $"{section["Instance"]}/{section["Domain"]}/{section["SignUpSignInPolicyId"]}/v2.0/";
options.Audience = $"{section["ClientId"]}";
});
关于azure-ad-b2c - 不记名 token 在 AAD B2C .NETCorre 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66483050/