如何在 asp.net 核心 2.0 中允许具有不同发行者的多个 JWT
How to allow multiple JWT with different issuers in asp.net core 2.0
有没有办法在单个 asp.net 核心 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();
}
我之所以要处理多个发行者,是因为我需要处理具有不同权限的不同用户类型。为了仅允许特定用户使用微服务架构环境中的某些服务,我想为每种用户类型使用不同的颁发者颁发令牌。
简单的答案是设置 TokenValidationParameters 实例的 ValidIssuers 属性 而不是 ValidIssuer 属性。 ValidIssuers 属性 采用 IEnumerable,因此您可以填写发行者名称列表并将其分配给该 属性(或仅内联列表)。
var issuers = new List<string>()
{
"issuerA",
"issuerB"
};
// ...
TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
{
// ...
ValidateIssuer = true,
ValidIssuers = issuers
// ...
};
警告:这假定每个发行者共享相同的秘密(或秘密列表,如果您使用相应的 IssuerSigningKeys 属性 而不是 IssuerSigningKey 属性)。
有没有办法在单个 asp.net 核心 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();
}
我之所以要处理多个发行者,是因为我需要处理具有不同权限的不同用户类型。为了仅允许特定用户使用微服务架构环境中的某些服务,我想为每种用户类型使用不同的颁发者颁发令牌。
简单的答案是设置 TokenValidationParameters 实例的 ValidIssuers 属性 而不是 ValidIssuer 属性。 ValidIssuers 属性 采用 IEnumerable,因此您可以填写发行者名称列表并将其分配给该 属性(或仅内联列表)。
var issuers = new List<string>()
{
"issuerA",
"issuerB"
};
// ...
TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
{
// ...
ValidateIssuer = true,
ValidIssuers = issuers
// ...
};
警告:这假定每个发行者共享相同的秘密(或秘密列表,如果您使用相应的 IssuerSigningKeys 属性 而不是 IssuerSigningKey 属性)。