【发布时间】:2020-08-30 08:38:25
【问题描述】:
我正在开发一个以 asp.net core 3.1 作为后端的多租户应用程序。我使用 JWT 对用户进行身份验证。我将tenantId 与http 请求一起传递,并且我想针对tenantIds 验证JWT。为此,我必须在每个客户端请求时将tenantIds 传递给 JwtBearerOptions.ValidAudience。
我在启动时设置选项如下...
public void ConfigureServices(IServiceCollection services){
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(configureOptions =>
{
configureOptions.ClaimsIssuer = jwtOptions["Issuer"];
configureOptions.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidIssuer = jwtOptions["Issuer"],
ValidAudience = tenantId,
ValidateIssuerSigningKey = true,
IssuerSigningKey = accessKey,
RequireExpirationTime = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
}
请注意,我不想将所有租户 ID 传递给 ValidateAudiences,因为每个租户都应该收到一个唯一的令牌。例如我不希望租户 X 的令牌对租户 Y 有效。
我如何做到这一点?
提前致谢!
【问题讨论】:
标签: jwt asp.net-identity asp.net-core-webapi multi-tenant asp.net-core-3.1