반응형
JWT 토큰이란?
인터넷 표준 인증 방식 (RFC 7519)
JSON 객체를 통해 사용자 정보를 안전하고 쉽게 암호화하는 방법
암호화 서명HMAC 알고리즘 또는RSA 또는 ECDSA를 사용한 공개/비공캐 키
JWT 토큰은 언제 사용되나?
- 인증
- 로그인 후에 매 번 HTTP 요청에 대한 오버헤드를 줄이기 위해 사용
- 이러한 사용 방식을 Single Sign On 이라고 한다
- 정보 변환
- 공개/비공개 키 알고리즘을 사용하기 때문에 안전한 정보 변환이 가능하다
JWT 토큰은 어떻게 구성되어있나?
- dot(.) 을 기준으로 세 부분으로 나뉜다
- Header / Payload / Signature
- xxxx.yyyy.zzzz
- Header
- 다음 두 부분으로, Base64Url Encoded로 사용
- 토큰의 타입
- 사용 된 암호화 서명
{
"alg": "HS256",
"typ": "JWT"
}
- Payload
- Claims: 보내려는 데이터 값
- 다음 세 개의 타입으로 나뉘어짐
- Registerd claims
- 필수는 아니지만, 추천되는 값들
- issuer, experation time, subject, audience
- Public Claims
- JWT를 사용하는 부분에서 정의되는 값들
- 표준으로 사용되는 Claims와 충돌되면 안 된다.
- https://www.iana.org/assignments/jwt/jwt.xhtml
- Private Claims
- https://www.iana.org/assignments/jwt/jwt.xhtml
- Signature
- 서명 부분을 사용하기 위해서는 header, payload가 인코딩 되어있어야 한다.
- Hmac algorithm을 사용한 signature 예시
- 서명 부분을 사용하기 위해서는 header, payload가 인코딩 되어있어야 한다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT 동장 방식
- 표준적으로 JWT 토큰은 HTTP 헤더에 다음과 같이 실린다
Authentication: Bearer <token>
- 이 방법은 stateless한 방법이고, 사용자가 접근하는 요청에 대한 보안이 강화된다.
- 몇몇 서버에서는 헤더에 8KB 이상의 정보를 담을 수 없기 때문에 너무 많은 정보를 담으려면 다른 대안을 찾아야한다
- JWT 토큰은 Authentication을 헤더에 담아 보내기 때문에 CORS 에러는 동작하지 않는다
- CORS가 쿠키를 사용하지 않기 때문에
- JWT 토큰 발행 순서
- 클라이언트 서버가 인증서버에 인증을 요청 (인증)
- OpenID Connection 등과 같은 복잡한 Web Application 로직에서는 추가적인 이증 로직이 더 들어갈 수 있다.
- 인증 서버에서 access token을 클라이언트에게 전달한다. (인가)
- 클라이언트는 access token을 가지고 리소스 서버에 정보를 요청한다.
- 클라이언트 서버가 인증서버에 인증을 요청 (인증)
[참조]
반응형
LIST
'CS > OAuth' 카테고리의 다른 글
JWT??? 어디에 저장되어야 하는가??? (0) | 2023.12.18 |
---|