보편적으로 API Key가 사용된다.
소셜로그인에서 사용하는 인증방식 : 인터넷 사용자들이 회원가입을 하지 않고 다른 웹사이트 상의 자신들의 정보를 통해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 개발형 표준 방법
네이버의 내 정보를 통해 어떤 쇼핑몰에 접근한다고 가정해보자. (OAuth 2.0 기준)
Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다. Claim은 사용자에 대한 속성을 의미한다. 즉, 토큰 자체가 사용자를 나타낼 수 있는 정보를 가지고 있고, 그 토큰을 Json을 이용하여 정의한다.
JWT는 Claim을 JSON 형태로 표현하는 것인데, JSON은 개행문자가 있기 때문에 REST API 호출시 HTTP Header 등에 넣기가 매우 불편하다. 그래서 Claim JSON 문자열을 BASE64 인코딩을 통해 하나의 문자열로 변환한다.
Header, Payload, Signature의 3 부분으로 이루어지며, Json 형태인 각 부분은 Base64로 인코딩 되어 표현된다. 또한 각각의 부분을 이어 주기 위해 .구분자를 사용하여 구분한다. 추가로 Base64는 암호화된 문자열이 아니고, 같은 문자열에 대해 항상 같은 인코딩 문자열을 반환한다.
Header
typ과 alg 두가지 정보로 구성된다. Signature를 해싱하기 위한 알고리즘을 지정한다
PayLoad
토큰에서 사용할 정보의 조각들인 Claim이 담겨 있다. Json(key-value) 형태로 다수의 정보를 넣을 수 있다.
Signature
토큰을 인코딩하거나 유효성 검증할 때 사용하는 고유한 암호화 코드이다.
JWT는 기본적으로 Claim에 대한 정보를 암호화하지 않는다. 단순히 BASE64로 인코딩만 하기 때문에 사용자 정보가 누출될 수 있는 가능성이 있다. 이를 보완하기 위해 토큰 자체를 암호화하는 방식이 있다. JSON을 암호화 하기 위한 예시로 JWE(JSON Web Encryption)이 있다.