1. header.payload.signiture로 나뉨
- header : jwt을 어떻게 검증하는지. 토큰의 타입, 암호화알고리즘
{
"alg": "서명 시 사용하는 알고리즘",
"kid": "서명 시 사용하는 키를 식별하는 값",
"typ": "타입"
}
-payload: 토큰에 담아서 보내고자 하는 데이터, 정보의 조각은 클레임이라고 함. key-value 한 쌍
{
"sub": "hyeonsu.jung",
"exp": 1623235123,
"iat": 1532341234
}
-signiture: 헤더와 페이로드를 합친 문자열을 서명한 값.
헤더의 alg에 정의된 알고리즘과 secret key를 이용해 생성, base64, url-safe로 인코딩
secret key 포함해서 암호화 되어있음
2. JWT 프로세스
- 로그인 전
(1). 사용자가 id와 password를 입력하고 서버로 로그인 요청을 보낸다.
(2). 서버는 비밀 키(secret key) 를 통해서 서명을 하고 공개 키(public key)로 암호화 시킨 Access Token을 발급한다.
(3). Access Token을 사용자(클라이언트)에게 보낸다.
- 로그인 후
(4). 로그인 정보가 필요한 API Call마다 토큰을 실어서 보낸다.
사용자(클라이언트)는 API를 요청할 떄 Authorization Header에 Access Token을 담아서 보낸다.
(5). 서버에서는 사용자가 보낸 토큰을 공개 키(public key)로 서명을 체크하고, 안에 담긴 정보를 확인한다.
서버는 secret key로 사용자가 보낸 토큰의 서명을 복호화하여서 유효한 토큰인지 확인한다.
(6). 서버가 요청에 대한 응답을 사용자(클라이언트)에게 전달한다.
- 참고
공개 키를 가진 누구나 데이터를 암호화해서 데이터를 보낼 수 있지만,
비밀 키를 가진 곳에서만 데이터를 복호화해서 내용을 확인할 수 있다.
'개발자 > 개발(회사용)' 카테고리의 다른 글
리눅스 파일 내용 검색 (0) | 2022.12.16 |
---|---|
openssl AES-256 암호화, 복호화 (0) | 2022.11.17 |
리눅스 파일 변경 명령어 (0) | 2022.11.14 |
다른 DB 의 테이블 복사 (0) | 2022.10.12 |
[쿼리] 정확도순 검색 (0) | 2022.09.23 |