如何在web API中验证Azure B2C JWT令牌?



根据标题,我可以通过我的web客户端从Azure B2C获得令牌,现在我需要做的就是在我的API中验证它。

这是我的appsettings.json(详细信息已更改,但显示的编号guid在实际文件中相互匹配):

{
"AzureAdB2C": {
"Authority": "https://login.mydomain.net/00000000-0000-0000-0000-000000000000",
"Audience": "11111111-1111-1111-1111-111111111111",
"Instance": "https://login.mydomain.net",
"Domain": "mydomain.net",
"ClientId": "11111111-1111-1111-1111-111111111111",
"TenantId": "00000000-0000-0000-0000-000000000000"
},
"ConnectionStrings": {
"SQLConnection": "Data Source=MyAppDebug.db;Cache=Shared"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}

我已经在我的Startup.cs中尝试了这些:

// Throws "System.InvalidOperationException: No authenticationScheme was specified, and
// there was no DefaultChallengeScheme found."
services.AddAuthentication()
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAdB2C"));
// Throws "System.InvalidOperationException: IDX20803: Unable to obtain configuration
// from: 'System.String'."
services.AddMicrosoftIdentityWebApiAuthentication(Configuration, Constants.AzureAdB2C);
// Throws "System.InvalidOperationException: IDX20803: Unable to obtain configuration
// from: 'System.String'."
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Audience = Configuration["AzureAdB2C:Audience"];
options.Authority = Configuration["AzureAdB2C:Authority"];
});
// Throws "System.InvalidOperationException: IDX20803: Unable to obtain configuration
// from: 'System.String'."
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(
(jwtOptions) =>
{
// I've commented this out because I don't yet have roles set up in
// Azure, but I have to include something for jwtOptions otherwise
// it won't build.
//// jwtOptions.TokenValidationParameters.RoleClaimType = "groups";
},
(options) =>
{
options.ClientId = this.Configuration["AzureAdB2C:ClientId"];
options.TenantId = this.Configuration["AzureAdB2C:TenantId"];
options.Domain = this.Configuration["AzureAdB2C:Domain"];
options.Instance = this.Configuration["AzureAdB2C:Instance"];
});

我已经无计可施了,不明白这怎么这么难。像往常一样,微软的指南和文档毫无用处。

我有一个有效的JWT令牌,我想做的就是验证它的签名、受众、发行者和声明。到目前为止,尝试和验证这个令牌所花费的时间比设置B2C目录、注册谷歌开发帐户和获得添加到Azure的凭据、注册我的应用程序、添加我自己的自定义范围、创建客户端秘密、实现到我的web应用程序和注册新用户所花费的时间要长。

我在ADFS上下文中写过这篇文章,但原理是一样的。

B2C也有一个众所周知的端点,您可以使用它来检查签名。

同样,对于。net Core。

这里有很多图书馆

我最终发现我(或者更确切地说,是API)没有正确构造发行者的URL,它需要包含用于创建令牌的策略(Sign Up/Sign In策略)。

这是我需要在appsettings.json文件:

"AzureAdB2C": {
"Instance": "https://login.mydomain.net",
"ClientId": "00000000-0000-0000-0000-000000000000",
"TenantId": "11111111-1111-1111-1111-111111111111",
"SignUpSignInPolicyId": "B2C_1_SignUpIn"
}

这是我在Startup.cs中使用的代码:

services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
.AddJwtBearer(jwtOptions =>
{
jwtOptions.Authority =
$"{Configuration["AzureAdB2C:Instance"]}/{Configuration["AzureAdB2C:TenantId"]}/{Configuration["AzureAdB2C:SignUpSignInPolicyId"]}/v2.0/";
jwtOptions.Audience = Configuration["AzureAdB2C:ClientId"];
});

话虽如此,我得到的异常类型和消息是非常无益的。

必须包含" signupsigninpolicyid ";在appsettings中。json配置。如果您使用自定义策略,请确保使用准确的策略名称。

相关内容

  • 没有找到相关文章

最新更新