asp.net core 3.1을 백엔드로 사용하는 다중 테넌트 응용 프로그램을 개발 중입니다. 사용자를 인증하기 위해 JWT를 사용했습니다. http 요청과 함께 tenantId를 전달하고 있으며 tenantId에 대해 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
};
});
}
각 테넌트가 고유 한 토큰을 받아야하므로 모든 tenantId를 ValidateAudiences에 전달하고 싶지 않습니다. 예 : 테넌트 X의 토큰이 테넌트 Y를 위해 작동하는 것을 원하지 않습니다.
어떻게해야합니까?
미리 감사드립니다!
나는 tenderid를 확인하기 위해 아래를 사용하게되었고 결과에 매우 만족합니다. 아래에 문제가 있으면 알려주세요. 감사합니다!
ValidAudiences = tenants.Value.Select(x=>x.TenantId).ToList(),
IssuerSigningKeyResolver = (string token, SecurityToken securityToken, string kid, TokenValidationParameters validationParameters) =>
{
var tenant = tenants.Value.Where(t => t.TenantId == kid).FirstOrDefault();
List<SecurityKey> keys = new List<SecurityKey>();
if (tenant != null && kid == tenantsResolver.GetCurrentTenantId())
{
var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tenant.SecretKey));
keys.Add(signingKey);
}
return keys;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다