5

ASP.NET ID 3.0을 사용하는 ASP.NET Core 5에서는 웹 페이지와 API를 모두 사용하고 있습니다. OpenIddict를 사용하여 JWT 토큰을 발행하고 인증합니다. 내가 UseJsonWebTokens()를 사용하지 않으면JWT 토큰을 통해 인증

X509Certificate2 c = new X509Certificate2(@"tokensign.p12", "MyCertificatePassword"); 

    services.AddOpenIddict<WebUser, IdentityRole<int>, WebDbContext, int>() 
     .EnableTokenEndpoint("/api/customauth/login") 
     .AllowPasswordFlow() 
     .UseJsonWebTokens() 
     .AddSigningCertificate(c); 

, 나는 토큰을 생성하고 성공적으로 권한을 부여 할 수 있습니다 : 내 코드는 다음과 같은 보인다. 그러나 내 인증서가 반환 된 토큰의 유효성을 검사하는지 확신 할 수 없습니다.

UseJsonWebTokens를 활성화하면이 종점에서 JWT 토큰을 발행 할 수 있습니다. 그러나 어떤 요청도 인증 할 수 없습니다!

나는 응용 프로그램 구성에 다음 코드를 사용하고 있습니다 :

app.UseJwtBearerAuthentication(new JwtBearerOptions 
    { 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true, 
     RequireHttpsMetadata = false, 
     Authority = "http://localhost:60000/", 
     Audience = "http://localhost:60000/", 
    }); 
    app.UseOAuthValidation(); 
    app.UseIdentity(); 
    app.UseOpenIddict(); 
    app.UseMvcWithDefaultRoute(); 
  • 을 나는 JWT 토큰이 훼손되어 있지 않은지 확인 내 인증서를 검증하기 위해 요청을 적용 할 수있는 방법.
  • JWT를 사용하지 않는다면 JWT 토큰의 유효성 검사 및 승인을 허용하는 올바른 설정은 무엇입니까?
+0

질문 제목에 태그를 넣지 마십시오! http://stackoverflow.com/help/tagging – Tseng

답변

5

내가 UseJsonWebTokens()를 사용하지 않으면, 내가 토큰을 생성하고 성공적으로 권한을 부여 할 수 있습니다. 그러나 내 인증서가 반환 된 토큰의 유효성을 검사하는지 확신 할 수 없습니다.

ASOS (OpenIddict 뒤에 오픈 ID Connect 서버 프레임 워크)에서

, 2 개의 다른 내장 직렬화 메커니즘을 만들고 보호하는 토큰이 있습니다 :

  • 하나는 IdentityModel를 사용 (도서관에 의해 개발 항상 생을 사용하여 만든 정의에 의해

신원 토큰 (JWT) : 마이크로 소프트) 및 타사에 의해 검증 표준 토큰을 생성 Openlddict가 동일한 직렬화 프로세스를 사용하는 액세스 토큰을 발행하게하려면 UseJsonWebTokens()으로 호출 할 수 있습니다.

AddSigningCertificate()을 호출 할 때 지정한 인증서는 항상 이러한 토큰에 서명하는 데 사용됩니다. (또한 Microsoft에서 개발)에 ASP.NET 코어 데이터 보호 스택을 사용

  • 하나 :

이 스택은 독점적으로 읽거나 확인하는 것은 아니다 "독점"토큰을 생성 타사 형식 인은 토큰 형식이 표준이 아니므로 반드시 대칭 서명 및 암호화를 사용해야합니다.

인증 코드 및 새로 고치기 토큰에 사용되는 메커니즘으로 OpenIddict 자체에서만 사용할 수 있습니다. 또한 기본 토큰 형식을 사용할 때 액세스 토큰에 사용됩니다.

이 경우 AddSigningCertificate()을 호출 할 때 지정한 인증서는 사용되지 않습니다.

대신 이러한 토큰은 진위성, 무결성 및 기밀성을 제공하는 Authenticated Encryption 알고리즘 (기본적으로 HMACSHA256과 함께 AES-256-CBC)을 사용하여 데이터 보호 스택에 의해 항상 암호화됩니다. 이를 위해 키 링에 저장된 마스터 키 중 하나에서 데이터 보호 스택에 의해 2 개의 키 (암호화 용, 유효성 용)가 추출됩니다. 내가 요청을 적용 할 수있는 방법

는 JWT 토큰이 훼손되어 있지 않은지 확인 내 인증서를 검증합니다. JWT를 사용하지 않을 경우 승인을 받았다는 점을 감안할 때 JWT 토큰의 유효성 검사 및 승인을 허용하는 올바른 설정은 무엇입니까?

이러한 질문에 대답하려면 로깅을 활성화하고 추적을 공유하면 도움이됩니다.

+1

이 기본 IdentityModel에서 사용하는 서명 키는 무엇입니까? 웹 팜을 사용하고 싶었던 경우에 대비해. – Adam

+1

서명 키는 사용하는 X.509 인증서입니다 (더 정확히는 포함 된 RSA 키) – Pinpoint

+1

키 링이란 무엇입니까? 마스터 키를 어떻게 저장합니까? Startup 중에 AddSigningKey()를 호출해야합니까? –