2016-10-01 3 views
1

j2ee 인증/인증 시스템을 개발 중입니다. JWT 토큰을 사용하고 JWS로 페이로드에 서명하고 JWE를 사용하여 암호화하려고합니다.JWE로 JWT/JWS를 생성하는 방법

I found a decent tutorial from bitbuckets jose4j

이 예에서는 그 사용이 JWK EllipticCurveJsonWebKey 생성 나타낸다. 인증/권한 부여에 이것이 어떻게 사용되는지 이해할 수 없습니다. 등록 정보 파일이나 JNDI 항목에 비밀 키를 저장 한 다음 해당 키를 사용하여 JWT에 서명/암호화 할 필요가 없습니까? 이렇게하면 HTTP 요청을 받으면 JWT를 확인하는 데 동일한 키를 사용할 수 있습니다. 내가 찾은 자습서의 대부분은 비슷한 예를 사용합니다.

어떻게이 작업을 동일한 서버 측 비밀 키로 수행 할 수 있습니까?

+0

구현시 OAuth2.0/OIDC와 호환 되려고합니까, 아니면 JWS (JWS 및 JWE 사용) 만 사용하여 사용자 세션을 유지하고 있습니까? – ingenious

+0

@ ingenious 사용자들에게 Google과 같은 OAuth2 제공자로 로그인 할 수있는 옵션을 제공하고 싶지만 현재 주요 목표는 사용자 세션을 유지하는 것입니다. –

답변

1

첫 번째 일 - 체크 아웃이 문서에 대해 authentication with OAuth2.0. 배경에 따라 OAuth & OpenID Connect를 읽어야 할 수도 있습니다.

그러나 서명 된 암호화 된 JWT로 서버 측 세션을 유지하려는 경우에도 마찬가지입니다. 당신의 JWT에서 일부 나타내는 적어도, 주장의 몇 가지가 필요합니다

  • 세션이 생성 될 때 (IAT) 생성 여전히 세션 유효 (특급)
  • 가 얼마나 오래
  • 세션, 그건 당신의 인증 시스템 (ISS)이 세션에서 인증
  • 즉 사용자 ID 또는 뭔가 (서브)의

나중에 당신이 청중 바람직하게는 비표를 추가 할 수 있습니다. 그러나 당신이 모든 것을 암호화한다면 당신은 또한 넌센스없이 그것을 얻을 수도 있습니다.

일반적으로 the OIDC core spec에있는 제안 된 클레임을 참조하는 것이 좋습니다.

여기 까다로운 부분이 있습니다. 기본적으로 두 가지 옵션이 있습니다. 서버 쪽 문자열을 생성 할 수 있습니다. 문자열은 모든 응용 프로그램에 완전히 불투명 해지고 세션이됩니다. 그런 다음 토큰 인트로 스펙 션 엔드 포인트를 제공하십시오. 여기에서 클라이언트는 위에서 설명한 클레임에이 문자열을 보내고 검색 할 수 있습니다 (세션에 매핑하기로 결정한 추가 모든 항목 포함). 또한이 불투명 한 문자열이 매핑되는 사용자 클레임과 함께 보존되는 저장소가 필요하다는 것을 의미합니다.

다른 방법으로 전체 묶음에 서명하고 (선택적으로 암호화하여) 전선으로 보낼 수도 있습니다. 사용자를 로그 아웃 할 수 있어야하는 경우에만 토큰에 대한 ID가 있어야합니다. 토큰에 서명하는 것은 비공개 키로 이루어지며, 비공개 키는 애플리케이션에서만 알고 있으며 모든 클라이언트의 인증은 애플리케이션이 공유 할 수있는 공개 키에 의해 수행됩니다. JWK 엔드 포인트를 제공합니다.

JWT에 넣은 클레임에 따라 실제로 암호화 할 필요가 없을 수도 있습니다.하지만 그렇다면 암호화를 위해 키를 관리해야합니다.

또한 토큰 인증에서 무엇이 무엇인지에 대한 개요를 보려면 this article을 확인하십시오.

+0

내가이 모든 일에 손잡이를 가지고 있다고 생각하자마자, 당신은 그걸 따라 와서 놀랐습니다. 정보를 제공해 주셔서 감사합니다. –