티스토리 뷰
JWT
* OAuth에 의해서 발급되는 access_token은 random string으로 토큰 자체에는 특별한 정보를 가지고 있지 않습니다. API나 서비스를 제공하는 서버 입장에서는 토큰을 가지고 토큰과 연관된 정보(사용자 ID나 권한 등..)를 서버쪽에서 찾아야 합니다.
이에 반해 JWT는 토큰자체가 정보를 가지고 있습니다. 사용자에 대한 프로퍼티나 속성을 Claim이라고 하는데, JWT는 이 Claim를 JSON 형태로 정의합니다.
{
"id":"terry"
,"role":["admin","user"]
,"company":"pepsi"
}
<JSON으로 Claim을 기술한 토큰의 형태>
* OAuth 토큰의 경우
1. API 클라이언트가 Authorization Server (토큰 발급서버)로 토큰요청
이때, 토큰 발급을 요청하는 사용자의 계정과 비밀번호를 넘기고, 이와 함께 토큰의 권한(용도)을 요청합니다. 여기서는 일반 사용자 권한(enduser)과 관리자 권한(admin)을 같이 요청하였습니다.
2. 토큰 생성 요청을 받은 Authorization Server는 사용자 계정을 확인한 후, 요청된 권한을 부여해도 되는지 계정 시스템등에 물어본 후, 사용자에게 해당 토큰을 발급이 가능하면 토큰을 발급하고, 토큰에 대한 정보를 내부(토큰 저장소)에 저장합니다.
3. 생성된 토큰은 API 클라이언트로 보냅니다.
4. API 클라이언트는 API를 호출할때 이 토큰을 이용해서 Resource Server(API 서버)에 있는 API를 호출합니다.
5. 이때 호출되는 API는 관리자 권한을 가지고 있어야 사용할 수 있기 때문에, Resource Server가 토큰 저장소에서 토큰에 관련된 사용자 계정, 권한 등의 정보를 가져옵니다. 이 토큰에 관리자 권한이 부여되어 있기 때문에, API 호출을 허용합니다.
6. API서버는 응답을 보냅니다.
* JWT와 같은 Claim 기반의 토큰 흐름
1. 마찬가지로 사용자를 인증한다음에, 토큰을 생성합니다.
2. Claim기반의 토큰은 토큰에 관련된 정보를 별도로 저장하지 않습니다. 연관되는 사용자 정보나 권한등을 토큰 자체에 넣어서 저장합니다.
3. API를 호출하는 방식도 동일합니다.
4. Resource Server (API 서버)는 토큰 내에 들어 있는 사용자 정보를 가지고 권한 인가 처리를 하고 결과를 리턴합니다.
결과적으로 차이점은 토큰을 생성하는 단계에서는 생성된 토큰을 별도로 서버에서 유지할 필요가 없으며 토큰을 사용하는 API 서버 입장에서는 API 요청을 검증하기 위해서 토큰을 가지고 사용자 정보를 별도로 계정 시스템 등에서 조회할 필요가 없다는 것입니다.
* 헤더(header)
헤더는 두가지 정보를 지니고 있습니다.
typ : 토큰의 타입을 지정합니다.
alg : 해싱 알고리즘을 지정합니다. 이 알고리즘은 토큼을 검증할 때 signature 부분에서 사용됩니다.
* 내용(payload)
토큰에 담을 정보가 name / value의 한 쌍으로 들어있습니다. 여기에 담는 정보의 한 '조각'을 클레임(Claim)이라 부르고, 토큰에는 여러개의 클레임을 넣을 수 있습니다.
* 서명(signature)
헤더의 인코딩값과, 정보의 인코딩값을 합친 후 주어진 비밀키로 해쉬를 하여 생성합니다.
# jwt.io
jwt.io 는 브라우저 상에서 JWT 토큰을 검증하고 생성 할 수 있게 해주는 디버거 서비스입니다.
아래의 예시 사진을 보면 base64로 인코딩된 문자열을 디코딩하여 왼쪽과 같은 토큰내용을 확인 할 수 있습니다. 하단의 텍스트가 파란색으로 Signature Verified 라고 뜨면 JWT 토큰이 검증되었다는 것 입니다.
출처
http://bcho.tistory.com/999 [조대협의 블로그]
https://velopert.com/2389 [VELOPERT.LOG]
'Web' 카테고리의 다른 글
| OAuth 2.0 (0) | 2018.01.10 |
|---|---|
| 쿠키(Cookie)와 세션(Session) & 캐시(Cache) (0) | 2018.01.09 |
| REST / RestFul (0) | 2018.01.05 |
- Total
- Today
- Yesterday
- JWT
- OAuth
- sns로그인
- 티스토리 플러그인
- Apache튜닝
- authentication
- Authorization
- IntelliJ Download
- 스프링부트
- HTTP프로토콜
- 인텔리제이 학생인증
- 대용량트래픽
- SpringBoot #스프링부트 #STS #이클립스
- KeepAlive
- SpringBoot
- 인텔리제이
- IntelliJ
- 구글로그인
- jwt인증
- apache 설정
- 아파치톰캣
- max Client
- 기술면접
- 인텔리제이 무료설치
- 쿠키와세션
- 티스토리 소스코드
- HTTP method
- claim토큰
- mod_deflate
- 페이스북로그인