JWT와 같은 토큰 기반의 인증을 사용하는 서버에서 로그인이 성공했다면, 토큰을 클라이언트에게 보내주어야 한다. 나는 보통 헤더에 이 토큰을 담아서 클라이언트에게 반환해주는데, 문득 어떤 필드에 이 값을 담아주어야 할지 고민이 되었다. 그래서 여러 글들을 찾아가며 정리한 내용을 써보고자 한다.
일반적으로 가장 많이 사용하는 헤더일 것이다. 사실 대부분의 경우에 가장 적절한 헤더이기도 하다. 헤더의 형식은 Authorization: <type> <token>
이며, JWT를 사용하는 경우 Bearer
을 타입으로 한다. 이 타입 말고도 Basic
이나 Digest
등 다양한 타입이 있지만, 사실상 사용할 일은 거의 없을 것이다.
OAuth 2.0에 대한 RFC 문서에서는 access_token
헤더를 사용하라고 한다. 또, 이 경우 token_type
역시 필수적으로 들어가야 한다. 추가로 만료 시간을 나타내는 expires_in
을 설정하는 걸 권장하고, refresh_token
을 같이 사용할 수도 있다.
만약 서버에서 클라이언트에게 access_token
과 refresh_token
을 모두 제공하기로 결정되었다면, 해당 규약을 사용하면 좋을 것 같다.
다만 이 방식은 OAuth 2.0의 스펙이기 때문에 실제 클라이언트와 통신하는 API 서버에 적용하는 것은 좀더 고려해보아야할 것이다. 참고로 카카오 REST API에서 OAuth API에 해당 스펙을 사용한 것을 알 수 있다. 만약 내가 만들 서버가 OAuth의 Authorization Server 역할을 맡게 된다면, 해당 스펙을 사용하자.
생각보다 빠르게 결론이 나버려서 크게 적을 것이 없다...
https://stackoverflow.com/questions/51503024/how-does-server-return-jwt-token-to-the-client
https://www.rfc-editor.org/rfc/rfc6749#section-5.1