원하는 것을 완전히 얻을 수 있습니다.
services
.AddAuthentication()
.AddJwtBearer("Firebase", options =>
{
options.Authority = "https://securetoken.google.com/my-firebase-project"
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "my-firebase-project"
ValidateAudience = true,
ValidAudience = "my-firebase-project"
ValidateLifetime = true
};
})
.AddJwtBearer("Custom", options =>
{
});
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Firebase", "Custom")
.Build();
});
코드와 그 코드의 차이점을 살펴 보겠습니다.
AddAuthentication
매개 변수가 없습니다
기본 인증 체계를 설정하면 모든 단일 요청에서 인증 미들웨어가 기본 인증 체계와 관련된 인증 처리기를 실행하려고합니다. 이제 두 가지 가능한 인증 체계가 있으므로 그중 하나를 실행할 필요가 없습니다.
다른 과부하 사용 AddJwtBearer
AddXXX
인증을 추가하는 모든 단일 방법에는 여러 가지 오버로드가 있습니다.
이제 동일한 인증 방법을 두 번 사용하지만 인증 체계는 고유해야하므로 두 번째 오버로드를 사용해야합니다.
기본 정책 업데이트
요청이 더 이상 자동으로 인증되지 않으므로 [Authorize]
일부 작업 에 속성을 추가하면 요청이 거부되고이 HTTP 401
발행됩니다.
인증 처리기에 요청을 인증 할 수있는 기회를주고 싶기 때문에 이것이 우리가 원하는 것이 아니기 때문에 요청을 인증하기 위해 Firebase
및 Custom
인증 체계를 모두 시도 해야 함 을 표시하여 권한 부여 시스템의 기본 정책을 변경합니다 .
그렇다고해서 어떤 행동을 더 제한하는 것을 막지는 않습니다. [Authorize]
속성은 가지고 AuthenticationSchemes
당신이 계획이 유효하는 인증을 무시할 수 있습니다 속성을.
더 복잡한 시나리오가있는 경우 정책 기반 권한을 사용할 수 있습니다 . 공식 문서가 훌륭하다고 생각합니다.
일부 작업은 Firebase에서 발급 한 JWT 토큰에서만 사용할 수 있으며 특정 값을 가진 클레임이 있어야합니다. 다음과 같이 할 수 있습니다.
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Firebase", "Custom")
.Build();
options.AddPolicy("FirebaseAdministrators", new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Firebase")
.RequireClaim("role", "admin")
.Build());
});
그런 다음 [Authorize(Policy = "FirebaseAdministrators")]
일부 작업에 사용할 수 있습니다 .
마지막으로 참고할 사항 : AuthenticationFailed
이벤트 를 포착 하고 첫 번째 AddJwtBearer
정책이 아닌 다른 것을 사용 IDX10501: Signature validation failed. Unable to match key...
하는 경우 이는 시스템 AddJwtBearer
이 일치 할 때까지 차례로 검사하여 발생 함을 볼 수 있습니다 . 이 오류는 일반적으로 무시할 수 있습니다.