JWS 를 소개하겠습니다.
JOSE (JSON Object Signining and Encryption) 의 아래에 있는 Spec 중 하나로 OAuth 의 근간이 된 기술이라고 한다.
아래는 JOSE 에 속한 기술들. 이 외에도 좀 더 있다.
JWT (JSON Web Token) : JWS or JWE
JWS (JSON Web Signature) : 서버에서 인증을 증거로 인증 정보를 서버의 private key 로 서명한 것을 Token 화 한것.
JWE (JSON Web Encryption) : 서버와 클라이언트 간 암호화된 데이터를 Token 화 한것.
JWK (JSON Web Key) : JWE 에서 payload encryption 에 쓰인 키를 token 화 한것. (물론, 키 자체도 암호화되어 있죠.)
JWS 구조는 header, payload, signature 로 나뉘며 header 와 payload 는 JSON Object 로 되어있고 signature 는 이 둘을 서명한 것이다.
각각에 대해 Base64 를 하고 . 으로 구분하면 이것이 바로 JWT 가 된다.
예를 들어보자
header 원본:
{
"alg": "HS256",
"typ": "JWT"
}
payload 원본:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Base64(header) = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Base64(payload) = eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
Base64(signature) = TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
서명에 쓰인 키는 Token 을 생성하는 자 (주로 인증 서버) 의 private key 이다.
이는 내부적으로 생성하여 가지고 있으면 된다.
자, 그럼 JWS 를 이용하여 인증을 하는 매커니즘을 살펴보자.
1. 클라이언트 A 가 로그인
2. 서버에서는 payload 에 넣고 싶은 내용을 담은 후 (로그인한 사람의 정보, 접근 권한 등) 서명하고 Token 발행
3. 클라이언트는 다음 통신에서 항상 Token 을 함께 전달
4. 서버에서는 주요 통신에서 Token 을 확인. 내가 서명한 것이 맞는지 서명에 대한 validation 수행
5. 내가 한 서명이 맞고 인증 정보를 확인한 후 적절히 행동.
payload 는 제약이 없다.
하지만 header 의 경우 pre defined key 가 있기 때문에 이를 제외하고 추가할 내용이 있다면 추가하면 된다.
아래는 참고 사이트
JOSE http://jose.readthedocs.io/en/latest/
JOSE Documents https://datatracker.ietf.org/wg/jose/documents/
AuthO https://auth0.com/learn/json-web-tokens/
JWT https://jwt.io/
'Tech. Etc' 카테고리의 다른 글
KEMP.Zipper 개발 회고 (0) | 2017.07.17 |
---|---|
개발시 크롬에서 Cross Domain이슈 회피 방법 (0) | 2017.05.26 |
Visual studio code 의 file tree에 icon 출력하는 방법 (4) | 2017.05.17 |