我正在尝试向我的ASP.NET Web应用程序添加一些承载令牌验证。我正在使用内置的JWT身份验证代码,该代码配置为使用以下代码...
services.AddAuthentication(ConfigureAuthentication).AddJwtBearer(ConfigureJwt);
运行以下功能...
private void ConfigureAuthentication(AuthenticationOptions options)
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}
private void ConfigureJwt(JwtBearerOptions options)
{
var directoryId = Configuration["AzureAd:DirectoryId"];
var directoryName = Configuration["AzureAd:DirectoryName"];
var policy = Configuration["AzureAd:SigninPolicyName"];
options.Audience = Configuration["AzureAd:ApplicationId"];
options.Authority = $"https://{directoryName}.b2clogin.com/{directoryName}.onmicrosoft.com/v2.0";
}
我正在处理ConfigureJwt
方法。我似乎无法获得底层的JWT代码来从相应的URL提取openid-configuration
。它非常接近,但是缺少URL中的策略。这是我上面的代码生成的内容,并试图从其中获取openid-configuration
。
https://example-directory.b2clogin.com/example-directory.onmicrosoft.com/v2.0/.well-known/openid-configuration
这是应该从Azure门户中指定的位置获取配置的内容...
https://example-directory.b2clogin.com/example-directory.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_SignInPolicy
如您所见,我上面的代码缺少策略名称。
我似乎无法弄清楚如何在任何地方指定此内容。有人知道如何配置JwtBearerOptions
使其包含此策略名称吗?
答案 0 :(得分:1)
我认为管理局必须是:
https://{directoryName}.b2clogin.com/{directoryName}.onmicrosoft.com/B2C_1A_signup_signin/v2.0
用您的策略ID替换 B2C_1A_signup_signin 。
其中包含策略ID,它将从正确的位置下载元数据。
答案 1 :(得分:0)
我从一名MS员工那里得到了有关如何正确执行此操作的答案。您可以设置元地址,即从中获取配置的地址。这样,您可以将权限设置为Azure所说的,同时拥有一个动态的元地址。以下是MS建议解决此问题的方式...
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AuthenticationOptions>(configuration.GetSection("Authentication:AzureAd"));
var serviceProvider = services.BuildServiceProvider();
var authOptions = serviceProvider.GetService<IOptions<AuthenticationOptions>>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) // sets both authenticate and challenge default schemes
.AddJwtBearer(options =>
{
options.MetadataAddress = $"{authOptions.Value.Authority}/.well-known/openid-configuration?p={authOptions.Value.SignInOrSignUpPolicy}";
options.Audience = authOptions.Value.Audience;
});
}