티스토리 뷰
원문: https://jwt.io/introduction/
JWT란?
JWT는 Json 객체를 이용하여 서로 다른편으로 정보를 안전하게 전달하기 위하여 자급 자족 방식으로 간결하게 정의하는 공개된 표준이다. 이러한 정보는 유효하고 신뢰될 수 있다. 왜냐하면 디지털 사인화 되었기때문이다. JWT들은 (HMAC 알고리즘을 사용하는) 암호를 사용하거나 RSA를 사용하는 퍼블릭/프라이빗 키 쌍을 이용하여 사인화 되었다.
Compact 간결한 : 사이즈가 작다. JWTs은 URL이나 Post의 파라미터, 또는 HTTP 헤더 안에 포함되어 전송될 수 있다. 추가적으로 작다는것은 빠르게 전달된다는 의미가 된다.
Self-contained: Payload는 사용자에 대해 모든 필수 정보를 포함하고 있어 데이터베이스 쿼리를 두번이상 할 필요가 없습니다.
시나리오
JWT 구조
- Header: 토큰 타입 / 사용된 해쉬 알고리즘(HMAC SHA256 or RSA) 정보를 담고 있다.
{
"alg": "HS256",
"typ": "JWT"
}
- Payload: 요청된 정보를 포함한다. 일반적으로 사용자 정보를 많이 포함한다. 또는 메타 데이터를 담고 있기도 한다. 요청은 예약, 공개, 비공개 3가지 타입이 있다.
- 예약된: 유용하고, 공동으로 사용할 수 있는 세트를 제공하기 위해서 의무사항은 아니지만 권장사항으로 미리 정의된 세트이다. 예시) iss (발행자), exp (만료 시간), sub (주제), aud (청중)
- 공개된: JWT를 사용하는 사람들이 자유롭게 정의. 충돌을 피하기 위해 IANA JSON 웹 토큰 레지스트리에 정의되거나 충돌 방지 네임 스페이스가 포함 된 URI로 정의
- 비공개: 이것은 사용에 동의한 사람들간에 정보를 공유하기 위한 사용자 요청
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
- Signature: 서명을 생성하기 위해서는 당신은 인코딩된 헤더, 인코딩된 페이로드, Secret(암호), 헤더에서 사용한 특정 알고리즘을 갖고 있어야 합니다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Web에서 JWT의 사용
Authorization: Bearer <token>
사용자의 상태를 서버의 메모리에 저장하지 않는것은 말할필요 없는 인증 메카니즘이다. 서버의 보호되는 라우트는 Authorization 헤더 안의 유효한 JWT를 체크하고 그것이 존재한다면, 정보에 접근하는 것을 허가한다. JWT들이 자급자족 방식이기 때문에, 모든 필요한 정보는 그안에 존재한다. 그래서 데이터베이스 쿼리에 필요한 많은 시간을 줄요준다.
이것은 상태가 없고 다운스트림 서비스에 요청을 보내는 data api에 당신이 전적으로 의존하도록 허락합니다. 어떤 도메인이 APIs를 제공하는지는 문제가 되지 않는다. 따라서 Cross-Origin Resource Sharing (CORS)은 쿠키를 사용할수 없는 것에 대해서 이슈가 되지 않을 것이다.
'Programming > Web' 카테고리의 다른 글
[node.js/express] static files (css, html, images) 처리 (0) | 2017.01.18 |
---|---|
Javascript 현재시간 구하기 ( getTime, UTC, Local) (0) | 2017.01.06 |
[Node.js/Express] interceptor 구현하기 (0) | 2017.01.04 |
[node.js/postgresql]하나의 파일을 이용해 DB connection 관리하기. (0) | 2016.12.30 |
[node.js/express] set default path (base url, prefix url) (0) | 2016.12.30 |