如何配置JwtBearerOptions在知名的openid-configuration URL中包括策略名称?

时间:2019-06-17 16:09:27

标签: azure azure-ad-b2c

我正在尝试向我的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使其包含此策略名称吗?

2 个答案:

答案 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;
        });
}