-
JWTSpring boot 2019. 12. 26. 00:21
*JWT - 토큰 기반 인증 방식 *
JWT는 Json Web Token의 약자로 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다.
사용자는 Access Token(JWT 토큰)을 HTTP 헤더에 실어 서버로 보내게 된다
JWT는 .으로 나뉘어져 Header, Payload, Verify Signature 구성되어 있다.-
Header
- 헤더는 HMAC SHA26 이나 RSA 와 같은 정보를 암호화할 알고리즘 방식(alg)과 토큰의 타입(type) 등이 들어간다{ "alg": "HS256", "typ": "JWT" }
-
Payload
- Payload는 claims을 포함한다. claim - 유저와 같은 entity, 추가적인 데이터
claims에는 세가지 타입이 있다 -
1.Registered claims
- 이미 정의된 클레임(권장)이다. 여기에는 아래의 종류들이 있다.- - Iss(Issuer) : 토큰 발행자
- - exp(expiration time) : 만료시간
- - sub(subject) : 토큰 제목
- - aud(audience) : 토큰 대상자
- - others
-
2.Public claims
- Registered Claims에 정의되지 않은 Claim들 , Registered Claims와 충돌을 방지하기위해 URL 형식으로 정의
- JWT를 사용하는 사람들이 임의로 정의할 수 있으나 충돌을 피하기 위해서 새로운 클레임 이름들은 IANA JSON Web Token Claims 레지스트리에 등록되어 있거나 충돌방지 네임스페이스를 포함하는 URI처럼 정의되어야 한다. -
3.Private claims
- 정보를 공유하는 개체간(서버 - 클라이언트) 동의하에 생성하는 클레임
- Verify Signature
- Base64 방식으로 인코딩한 Header, payload 그리고 secret key를 더한 후 서명 한다
- 예를들어 HMAC SHA256 알고리즘을 사용한다면, 시그니처는 아래와 같이 만들어진다
- 시그니쳐는 도중에 메시지가 변경되지 않았다는 것을 검증하기 위해 사용된다.HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
- Header, Payload는 인코딩될 뿐(16진수로 변경), 따로 암호화되지 않는다
- 암호화 되는 건 Verify Signature. Verify Signature는 SECRET KEY를 알지 못하면 복호화할 수 없다.
출처###
https://tansfil.tistory.com/58?category=255594
https://jwt.io/'Spring boot' 카테고리의 다른 글
Spring Boot - OAuth2.0 password 방식으로 간단한 인증서버 구현하기 (0) 2020.01.09 OAuth2.0 (0) 2019.12.24 스프링부트-mustache 연동시 404에러 뜰 때. (0) 2019.12.03 -