이번주 수업시간에는 JWT와 토큰, OAuth2에 대해 공부했습니다.
서버 기반 인증 vs 토큰 기반 인증
서버에 접근하는 인증된 사용자를 구분하는 대표적인 방법으로는 서버 기반 인증과 토큰 기반 인증 2가지 방법이 있다.
- 화면 없이 Ajax와 JSON을 이용해서 데이터를 주고받는 구조에서는 세션이나 쿠키를 이용하는 기존 인증방식에 제한을 받게 된다.
- 이 문제를 해결하기 위해 사용하는 것이 JWT(JSON Web Token)이다. (인증받은 사용자들은 특정한 문자열인 토큰을 이용하게 된다.)
- 토큰을 사용한다는 것은 요청과 응답에 토큰을 함께 보내 유효한 사용자인지를 검색하는 방법이다. 이때 보통 JWT를 사용해서 토큰을 전달한다.
- 클라이언트가 아이디와 비밀번호를 서버에게 전달하며 인증을 요청한다.
- 서버는 아이디와 비밀번호를 가진 사용자를 확인한다.
- 서버는 유효한 사용자인 경우 토큰을 생성한다.
- 서버는 사용자에게 응답과 함께 토큰을 전달한다.
- 클라이언트는 토큰을 저장해두었다가, 인증이 필요한 api에 요청할 때 토큰 정보와 함께 요청한다.
- 서버는 토큰이 유효한지 검증한다.
- 이 토큰이 유효한 경우에는 응답을 해준다.
- 토큰 사용 방식의 특징
- 무상태성 : 서버에서 별도의 저장소가 필요 없어 완전한 무상태(stateless)를 가질 수 있다.
- 확장성 : 토큰 기반 인증을 사용하는 다른 시스템에 접근이 가능하다.
- 무결성 : 쿠키를 전달하지 않기 때문에 쿠키의 취약점이 사라진다.
JWT(JSON Web Token)
- 토큰 기반 인증 시스템의 대표적인 구현체
- Java를 포함한 많은 프로그래밍 언어에서 지원하며, 보통 회원 인증을 할 때 사용된다.
- JWT는 . 을 기준으로 헤더(header), 내용(payload), 서명(signature)로 이루어져있다.
- 헤더(header) : 토큰의 타입과 해싱 알고리즘을 지정하는 정보를 포함
- 정보(payload) : 토큰에 담을 정보, 정보의 한 덩어리를 클레임(claim)이라고 부른다. 클레임은 key, value의 한 쌍으로 이루어져 있다.
- 서명(signature) : 토큰이 조작되었거나 변경되지 않았음을 확인하는 용도로 사용
OAuth
- OAuth2 Client : 프로젝트에서 소셜 로그인을 이용하기 위한 라이브러리
- 대부분의 소셜 로그인은 OAuth2방식으로 데이터를 처리한다.
- 문자열로 구성된 토큰(token)을 주고받는 방식으로, 토큰을 발행하거나 검사하는 방식을 통해서 서비스 간 데이터를 교환한다.
수업시간에는 OAuth2를 구글로그인을 하는 방식으로 테스트 해보았는데 가지고 있는 스프링 책에서는 국내에서 많이 사용하는 카카오로그인으로 설명되어 있는 부분이 있습니다.
실습을 진행하며 두가지 방법 모두 테스트 해봐야겠습니다.
'[패스트캠퍼스]KDT 핀테크 서비스 백엔드 > review' 카테고리의 다른 글
21주차 Review - 스프링 (0) | 2023.02.03 |
---|---|
20주차 Review - 데이터베이스 (0) | 2023.01.27 |
18주차 Review - Spring/SpringBoot (0) | 2023.01.13 |
17주차 Review - Spring/SpringBoot (0) | 2023.01.06 |
16주차 Review - Spring/SpringBoot (0) | 2022.12.30 |