如何在asp.net core 2.0中允许多个JWT与不同的发行者

时间:2017-10-02 05:41:21

标签: jwt asp.net-core-2.0

有没有办法在单个asp.net core 2.0应用程序中处理来自多个发行者的JWT?

这是我目前正在检查令牌的方式:

public void ConfigureServices(IServiceCollection services)
{
    TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
    {
        // ...

        ValidateIssuer = true,
        ValidIssuer = options.Issuer, // <-- could this be a list of issuers?

        // ...
    };

    services.AddAuthentication()
        .AddJwtBearer(jwtOptions =>
        {
            jwtOptions.TokenValidationParameters = tokenValidationParameters;
        });

    services.AddAuthorization(authOptions =>
        {
            authOptions.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().Build();
        });
}

public void Configure(IApplicationBuilder app)
{   
    // ...
    app.UseAuthentication();
}

我想处理多个发行者的原因是因为我需要处理具有不同类型权限的不同用户类型。为了仅允许特定用户使用微服务架构环境中的某些服务,我想为具有不同发行者的每种用户类型发出令牌。

1 个答案:

答案 0 :(得分:2)

简单的答案是设置TokenValidationParameters实例的ValidIssuers属性而不是ValidIssuer属性。 ValidIssuers属性采用IEnumerable,因此您可以填写发布者名称列表并将其分配给该属性(或者只是内联列表)。

props

警告:这假定每个发行者共享相同的秘密(或秘密列表,如果您使用相应的IssuerSigningKeys属性而不是IssuerSigningKey属性)。