본문 바로가기

우아한테크코스

📋 테스트로 배우는 Spring Auth 강의

2021-05-28글

피드백 강의

인증 헤더

로그인을 통해 토큰을 발급 받은 후 헤더에 Authorization에 토큰을 실어보낸다.
왜 굳이 이 헤더에 토큰을 넣어 보낼까?

HTTP 인증

HTTP 프로토콜의 정의이기 때문이다.

  1. 클라이언트가 "/" 요청을 보낸다.
  2. 서버는 접근을 할 수 있는지 확인하고, 없으면 401을 보낸다.
  3. 여기서는 basic이라는 방식으로 토큰을 검증하고 있다. 잘못되었으니 다시 요청해!

HTTP 인증 스킴

Basic

  • base64를 이용해 인코딩된 사용자의 id/pw 쌍의 인증 정보를 전달
  • 안전을 위해 HTTPS(TLS) 연결 위에서 발생되어야 함

Bearer

  • bearer token이라는 보안 토큰을 활용하는 인증 스킴
  • Outh2.0에서 사용하기 위해 만들어짐

JWT

  • Json Web Token
  • 웹 표준 (RFC 7519)
  • 자체적으로 검증되었음을 증명해주는 signature를 포함
  • 생성시 검증이나 권한 인가 시 필요한 값을 넣어 상태를 따로 관리하지 않아도 됨

토큰의 구성

1. Header

  • 토큰에 대한 해석 방법
  • alg : 시그니처에서 사용할 알고리즘 방법
  • typ : 토큰의 타입

2. Payload

  • 토큰의 내용, 전달할 내용
  • payload의 각각의 값을 클레임이라고 함
  • sub : 클레임의 제목
  • name :
  • iat : 생성 시간
  • 이 역시도 base64로 인코딩

3. Signature

  • 헤더와 페이로드가 변조되지 않았음을 검즌
  • base64로 인코딩을 하고, 알고리즘과 키값으로 해독

basic과 bearer 둘 다 base64로 인코딩 하면 어떻게 구별하나요?

이는 서버에서 페이크처럼 쓸 수 있지!

payload가 같으면 토큰 값도 같아지나요?

근데 아마 iat가 달라서 다를 수 밖에 없을 듯


Dispatcher Servlet

요청에 따라 수행할 로직 분기

DispatcherServlet 위치

  • Handler 앞에 Interceptor가 있음

MVC Config 객체도 모두 빈이었다.