【问题标题】:netcore2 authentication with Azure Active Directory: "The signature is invalid"使用 Azure Active Directory 进行 netcore2 身份验证:“签名无效”
【发布时间】:2018-03-08 05:45:16
【问题描述】:

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

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

Bearer error="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);
        }
    }

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

谢谢

【问题讨论】:

  • 如何发送不记名令牌?应该有一个标题Authorization Bearer &lt;your token goes here&gt;。还可以查看this answer,看看它是否对您的 API 配置有帮助。
  • 是的,我有标题...
  • @HLourenco 你还记得你是否解决过这个问题吗?如果是这样,怎么做?我也有同样的问题...
  • @Gabriel Bourgault 我已经解决了这个问题,我想我所做的是,在 AAD 中我更改了我的应用程序的权限,从那时起,令牌一直有效,因为实体被识别跨度>

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


【解决方案1】:

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

JWT 令牌应该由点分隔的三部分组成。签名是第三部分。

您可以在http://jwt.calebb.nethttps://jwt.io查看您发送的令牌

【讨论】:

  • 它不起作用,我有正确的标题,但它不起作用。签名最后有[signature]。还有其他的吗?
【解决方案2】:

我遇到了类似的问题,只是使用了以下方法,它起作用了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2016-05-12
    相关资源
    最近更新 更多