JWT 인증

JWT(JSON 웹 토큰)는 HTTP 권한 부여 헤더 및 URI 쿼리 매개변수와 같이 공간이 제약된 환경을 위한 간결한 클레임 표현 형식입니다. 청구는 청구 이름 및 청구 값을 포함하는 이름-값 쌍으로 표시됩니다.

JWT의 청구는 JWS (JSON Web Signature) 구조의 페이로드 또는 JWE (JSON Web Encryption) 구조의 일반 텍스트로 사용되는 JSON 오브젝트로 인코딩됩니다. JWT 청구는 디지털로 서명되거나 MAC (Message Authentication Code) 로 무결성 보호될 수 있으며 암호화될 수도 있습니다.

JWT 개요

JWT는 JWS 또는 JWE 구조에서 인코딩되는 JSON 오브젝트로 청구 세트를 표시합니다. 이 JSON 오브젝트는 JWT 청구 세트입니다. JSON 오브젝트는 0개이상의 이름-값 쌍 (또는 멤버) 으로 구성되며, 여기서 이름은 문자열이고 값은 임의의 JSON값입니다. 이 멤버는 JWT로 표시되는 청구입니다. JWT 청구 세트 내의 구성원 이름을 청구 이름이라고 합니다. 해당 값을 청구 값이라고 합니다.

JWT는 마침표('.') 문자로 구분된 URL 부분의 시퀀스로 표시됩니다. 각 부분에는 base64url-encoded 값이 포함됩니다. JWT의 파트 수는 JWS 압축 직렬화를 사용하는 결과 JWS 또는 JWE 압축 직렬화를 사용하는 JWE의 표시에 따라 다릅니다.

JWT 유형

JWT의 기본 유형은 다음과 같습니다.
  • JWS (JSON Web Signature) -이 유형의 JWT 컨텐츠는 JWT의 컨텐츠가 송신자와 수신자 간 전송 중에 변조되지 않도록 디지털로 서명됩니다. JWS의 컨텐츠 또는 청구는 다른 당사자도 읽을 수 있습니다. 따라서 JWS를 사용하여 컨텐츠 또는 청구의 무결성을 확인할 수 있지만 비밀번호와 같은 민감한 데이터를 전송하는 데 사용해서는 안됩니다. JWS는 본질적으로 데이터 읽기를 방지하지 않기 때문에 일반적으로 HTTPS 또는 SSL을 통해 사용됩니다.
  • JWE (JSON Web Encryption) -이 유형의 JWT 컨텐츠는 디지털로 암호화됩니다. 이는 무결성을 확인하고 컨텐츠를 보호하는 데 사용할 수 있음을 의미합니다. 본질적으로 콘텐츠를 암호화하기 때문에 일반 HTTP 통해 사용할 수 있습니다.
참고: Sterling™ Order Management 시스템은 JWS만 지원합니다.

JWT 예제

일반적인 JWS의 형식은 <기본 64 URL 인코딩된 헤더 json>.<기본 64 UK로 인코딩된 페이로드 json>.<기본 64 URL 인코딩된 서명>입니다

다음 서명은 RS256 알고리즘을 사용하여 Base 64 URL 인코딩된 헤더와 페이로드의 내용을 암호화 키로 서명하여 얻습니다.
Header 
{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "a1"
}

Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022,
  "exp": 1531762065
}
다음 그림은 RS256 개인 키로 서명된 JWT의 샘플 JWS 표시입니다.
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ
.z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT
5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk

샘플에 설명된 대로 JWS에는 다음 파트가 있으며 "." 로 구분됩니다. 문자.

  • 헤더 = eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0
  • 페이로드 = G4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ
  • 서명 = z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk