jwt

JWT에 대한 이해 2-2 with JWT handbook

Chapter 2-2

Posted by 동식이 블로그 on December 12, 2019

JWT에 대한 이해 2-2

2장 2번째

여기서부터 뭔가 중요한 내용들이 나오는것 같다..


2-2. Federated Identity

연합된 ID 시스템은 서로 다른 당사자들이 다른 당사자들과 인증 및 승인 서비스를 공유할 수 있도록 허용한다. 즉, 사용자의 신분은 중앙집중화되어 있다. SAMLOpenConnect는 가장 흔한 두 가지 연합 ID관리 솔루션이다. 이러한 표준은 위에서 언급한 표준 중 하나를 구현하거나 완전히 다른 표준을 사용할 수 있다. 이 회사들 중 일부는 이 목적을 위해 JWT를 사용한다.

SAML이란?

인증 정보 제공자(identity provider)와 서비스 제공자(service provider) 간의 인증 및 인가 데이터를 교환하기 위한 XML 기반의 개방형 표준 데이터 포맷

OpenConnet란?

안전한 지점 간 연결을 구현하는 가상 사설망(VPN)에 연결하기 위한 오픈소스 소프트웨어

중앙집중식 인증 및 인가를 위한 JWT의 사용은 회사마다 다르지만, 인증 과정의 본질적인 흐름은 다음과 같다.

5

  1. 사용자가 서버에서 제어하는 리소스에 엑세스 하려고 시도
  2. 사용자가 리소스에 엑세스할 수 있는 적절한 자격증명이 없으므로 서버는 사용자를 권한 부여 서버로 리디렉션한다.
  3. 사용자는 인증서버에 의해 ID의 제공자 로그인 화면으로 리디렉션된다.
  4. 사용자가 로그인해 권한 부여 서버로 리디렉션되고, 인증서버는 ID제공자가 제공한 인증정보를 사용해 리소스 서버에 필요한 인증정보에 엑세스한다.
  5. 사용자는 권한부여 서버에 의해 자원서버로 리디렉션된다. 이제 요청은 리소스에 엑세스하는 데 필요한 올바른 자격증명을 갖게 된다.
  6. 사용자가 리소스에 성공적으로 엑세스

인증 서버에서 사용자에게 반환된 자격증명은 JWT로 인코딩할 수 있다. 인증 서버가 ID 제공자를 통한 로그인을 허용하는 경우, 인증 서버는 사용자에게 통일된 인터페이스와 통일된 데이터(JWT)를 제공하고 있다고 할 수 있다.

2-2-1. Access and Refresh Tokens

Access TokenRefresh Token은 서로 다른 토큰의 유형이다.

두 개념 모두 대게 OAuth2 규격에서 구현된다. OAuth2는 엑세스 권한을 소유권과 분리하여 리소스에 대한 엑세스를 제공하는 데 필요한 일련의 단계를 정의한다. 즉, 접근 수준이 다른 여러 당사자가 동일한 리소스에 엑세스할 수 있도록 허용한다.

Oauth란?

인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근위임을 위한 개방형 표준

Access Token은 보호되는 리소스에 엑세스할 수 있는 토큰이다. 이 토큰들은 대게 수명이 짧으며, 그 안에 토큰의 유통기한이 포함되어 있을 수도 있다. 또한 추가정보(엑세스 토큰에는 요청이 허용된 IP주소가 포함될 수 있다)를 포함하거나 관련시킬 수 있다.

Refresh Token은 클라이언트가 새로운 토큰을 요청할 때 발급한다. 예를들어, Access Token이 만료된 후 클라이언트는 권한 부여 서버에 대한 새로운 Access Token을 요청하게 되는데, 이 요청으로 Refresh Token이 발급되게 된다. Access Token과는 다르게 Refresh Token은 대게 수명이 길다.

6

Access TokenRefresh Token분리의 주요 측면은 토큰을 검증하기 쉽게 할 수 있는 가능성에 있다.

서명을 전달하는 Access Token(JWT 같은)은 리소스 서버가 자체적으로 검증할 수 있기 때문에 이 목적을 위해 인증 서버에 요청할 필요가 없다.

반면에 Refresh Token을 발급 받게 되면, 권한 부여 서버에 대한 엑세스가 필요하게 된다. 인증 서버에 대한 쿼리와 별도로 유효성 검사를 유지함으로써 지연시간을 단축하고, 복잡한 엑세스 패턴을 줄일 수 있다. 토큰이 노출될 시 적절한 보안은 가능한 짧은 기간 동안 토큰에 접근하고, 추가점검을 포함시킴으로써 해결한다.

Refresh Token은 오래 지속되기 때문에 노출로부터 보호되어야 한다. 노출이 발생할 경우 서버에서 블랙리스트를 작성해서 해결할 수 있다(Access Token은 짧은 수명을 가지고 있어서, 결국 Refresh Token을 사용해야 하므로 블랙리스트가 작성되고 모든 Access Token이 만료된 후 리소스를 보호한다)

2-2-2. JWTs and OAuth2

OAuth2는 토큰의 형식에 대해서 언급하지 않지만, JWT는 OAuth2의 요구조건과 잘 맞는다. 서명된 JWT는 리소스에 대한 액세스 수준을 구별하기 위해 필요한 모든 데이터를 인코딩할 수 있고 만료 날짜를 전송할 수 있으며 권한 부여 서버에 대한 유효성 검사 쿼리를 피하기 위해 서명된 토큰에 대한 액세스를 한다.

JWT는 Refresh Token에도 사용할 수 있지만 이런 목적으로 사용할 이유는 더 적다. Refresh Token에는 권한 부여 서버에 대한 엑세스가 필요하므로, 대부분의 경우 간단한 UUID로 충분하며, 토큰이 페이로드를 운반할 필요가 없기 때문이다.(물론 서명될 수도 있다)

UUID란?

범용 고유 식별자(Universally Unique Identifier, UUID)는 소프트웨어 구축에 쓰이는 식별자 표준

쉽게 말해 데이터를 고유하게 식별하는데 사용되는 16바이트(128비트)길이의 숫자이다.

2-2-3. JWTs and OpenID Connet

OpenID Connet는 OAuth2의 대표적인 사용 사례를 공통의 잘 정의된 규격하에 가져오려는 표준화 작업이다(OAuth2를 확장해서 개발). OpenId Connet는 OAuth2 인증 흐름을 수행하기 위한 API와 데이터 형식을 정의하며, 인증에 대한 정보는 ID Token이라고 불리는 JWT이다.

2-2-3-1. OpenID Connet Flows and JWTs

OpenID Connets는 데이터를 반환하는 몇가지 흐름을 정의하는데, 이 데이터 중 일부는 JWT형식이다.

  • Authorization flow
  • Implicit flow
  • Hybrid flow


JWT 공식사이트의 Sebastián E. Peyrott, Auth0 Inc. “The JWT Handbook.”을 요약 정리했습니다… 오역이 있을수 있으니 더 자세한 내용은 사이트를 참고해주세요…