使用Azure Active Directory进行netcore2身份验证:"签名无效"

时间:2017-09-26 21:17:18

标签: .net asp.net-core asp.net-core-mvc azure-active-directory asp.net-core-2.0

我有一个webapi,我需要进行身份验证,我在V1中使用AAD进行身份验证。

我已经完成所有设置,邮递员我可以获得一个令牌,但是,每当我尝试向api发出请求时,它都会给我错误401:

  

承载错误=" invalid_token",error_description ="签名无效"

这是ConfigurationServices上的代码:

    services.AddAuthentication(sharedOptions =>
    {
        sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;

    })
    .AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));

这是为azure身份验证生成的类:

    public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder)
        => builder.AddAzureAdBearer(_ => { });

    public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder, Action<AzureAdOptions> configureOptions)
    {
        builder.Services.Configure(configureOptions);
        builder.Services.AddSingleton<IConfigureOptions<JwtBearerOptions>, ConfigureAzureOptions>();
        builder.AddJwtBearer();
        return builder;
    }

    private class ConfigureAzureOptions: IConfigureNamedOptions<JwtBearerOptions>
    {
        private readonly AzureAdOptions _azureOptions;

        public ConfigureAzureOptions(IOptions<AzureAdOptions> azureOptions)
        {
            _azureOptions = azureOptions.Value;
        }

        public void Configure(string name, JwtBearerOptions options)
        {
            options.Audience = _azureOptions.ClientId;
            options.Authority = $"{_azureOptions.Instance}{_azureOptions.TenantId}";
        }

        public void Configure(JwtBearerOptions options)
        {
            Configure(Options.DefaultName, options);
        }
    }

这里缺少什么?可以请帮忙吗?

谢谢

2 个答案:

答案 0 :(得分:0)

正如pcdev在评论中所说,请确保将Authorization标头添加到所有请求中。

JWT令牌应分为三个部分,用点分隔。签名是第三部分。

您可以查看您在http://jwt.calebb.nethttps://jwt.io

发送的令牌

答案 1 :(得分:0)

我有一个类似的问题,只使用了以下内容就可以了。

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
            .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);