본문 바로가기
TIL

토큰 기반 인증 (22.10.31 TIL)

by winteringg 2022. 10. 31.

11주차 첫 날의 과제를 수행하면서, JWT 를 인증 방법으로 활용하며 아래 코드처럼 헤더 값으로 Bearer + token 값을 받아서 사용했다. Bearer 라는 게 무엇인지도 정확히 모르면서 사용했어서 오늘 til 로 정리하려 한다. 

mockMvc.perform(MockMvcRequestBuilders.get("/")
            .header("Authorization", "Bearer " + accessToken))
    .andExpect(status().isOk())
    .andExpect(content().string(
            containsString("Hello, Test")
    ));

 

Bearer 에 대해 이야기 하기 전에 토큰이 무엇인지를 먼저 정리해보자. 토큰(Token) 은 stateless 서버이다. stateless 서버는 stateful 서버와 다르게 세션 값으로 클라이언트 상태 유지를 하지 않는다. 상태 정보를 저장하지 않으면, 서버는 클라이언트 측에서 들어오는 요청으로만 작업을 처리한다. 이렇게 상태가 없는 경우, 클라이언트와 서버의 연결고리가 없기 때문에 서버의 확장성이 높아진다.

내가 사용했던 JWT(Json Web Token) 는 클라이언트와 서버 혹은 서비스간의 통신시 정보를 JSON 객체를 통해 안전하게 전송하고 인가(Authorization)을 위해 사용하는 토큰이다.

일반적으로 토큰은 요청 헤더의 Authorization 필드에 담아져 보내진다.

Authorization: <type> <credentials>


내가 궁금했던 Bearer 은 위 형식에서 <type> 에 해당한다. 토큰에는 많은 종류가 있고, 서버는 다양한 종류의 토큰을 처리하기 위해 전송받은 type 에 따라 토큰을 다르게 처리한다.

서비스 개발의 입장에서, Scheme을 무엇을 사용하더라도, Token이라는 값이 제대로 서버와 클라이언트에 전달되고, 인증 인가만 잘 동작한다면 괜찮을 수 있다고 생각할 수 있다. 하지만 이 방식은 다른 써드 파티, OAuth 같은 공개 표준 규약에서 사용하려면 토큰 인증 형태가 다르기 때문에 다시 로그인을 해야 하는 형태가 될 수밖에 없었다고 한다. 그래서 W3C는 형태가 표준이 없다고 생각하고, 토큰 기반 인증에 대해서 표준 내용을 제정하게 되었고, 토큰 기반 인증이라면 Bearer라는 Scheme을 사용하도록 제시했다.

즉 bearer가 아닌, 다른 키워드를 사용할 수 있지만 Bearer를 활용하는 것이 JWT 혹은 OAuth에 대한 토큰을 활용할 때 사용하기로 한 일종의 약속이라는 것을 알 수 있었습니다. 

아래는 인증타입의 종류이다.

Basic

사용자 아이디와 암호를 Base64로 인코딩한 값을 토큰으로 사용한다. (RFC 7617)

Bearer

JWT 혹은 OAuth에 대한 토큰을 사용한다. (RFC 6750)

Digest

서버에서 난수 데이터 문자열을 클라이언트에 보낸다. 클라이언트는 사용자 정보와 nonce를 포함하는 해시값을 사용하여 응답한다 (RFC 7616)

Hoba

전자 서명 기반 인증 타입 (RFC 7486)

Mutual

암호를 이용한 클라이언트-서버 상호 인증 (draft-ietf-httpauth-mutual)

AWS4-HMAC-SHA256

AWS 전자 서명 기반 인증

 

 

참고 : 

 

Authenticating Requests: Using the Authorization Header (AWS Signature Version 4) - Amazon Simple Storage Service

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

 

토근 기반 인증에서 bearer는 무엇일까?

본 글은 MDN - HTTP 인증, Veloport님의 게시글을 참고하여 작성되었습니다. 자세하게 알고싶으신 분은 해당 링크를 참고해주세요.토큰 기반 인증인증 타입마치며토큰 기반 인증은 쿠키나 세션을 이

velog.io

 

 

JWT 토큰 인증

JWT 토큰을 설명하기에 앞서 토큰 기반의 인증 방식에 대한 내용과 JWT 기본 개념에 대해서 포스팅을 하였습니다.토큰(Tocken)기반 인증은 모던 웹서비스에서 정말 많이 사용되고 있습니다. 웹 서비

velog.io

 

'TIL' 카테고리의 다른 글

해시 함수란 (22.11.02 TIL)  (1) 2022.11.02
암호 기법 간단 분류 (22.11.01 TIL)  (0) 2022.11.01
Spring - @Bean, @Component (22.10.30 TIL)  (0) 2022.10.30
JAVA Stream (스트림) (22.10.29 TIL)  (0) 2022.10.29
미래 그려보기 (22.10.28 TIL)  (0) 2022.10.28

댓글