본 포스트는 도서 처음 배우는 스프링 부트 2 의 5장 OAuth 인증 파트를 읽고 이해한 내용을 정리하였습니다.
OAuth?
OAuth 는 토큰을 사용하여 인증하는 표준 인증 프로토콜이다.
OAuth2 는 OAuth 프로토콜의 버전 2이며, OAuth2에서 제공하는 승인타입은 총 4가지이다.
권한 부여 코드 승인 타입(Authorization Code Grant Type)
클라이언트가 사용자 대신 특정 리소스에 접근을 요청할 때 사용한다. 리소스 접근을 위한 사용자명과 비밀번호, 권한 서버에 요청해서 받은 권한 코드를 함께 활용하여 리소스에 대한 액세스 토큰을 받으면 이를 인증에 이용하는 방식
암시적 승인 타입(Implicit Grant Type)
권한 부여 코드 승인 타입
과 다르게, 코드 교환 단계 없이 액세스 토큰을 즉시 받아 인증에 이용하는 방식
리소스 소유자 암호 자격 승인 타입
클라이언트가 암호를 사용하여 액세스 토큰에 대한 사용자의 자격 증명을 교환하는 방식
클라이언트 자격 승인 타입
클라이언트가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식
권한 부여 코드 승인 타입
페이스북, 구글, 카카오 등의 소셜 미디어들이 웹서버 형태의 클라이언트를 지원하는데, 이 방식을 사용하기 때문.
이 방식은 웹서버에서 장기 액세스 토큰(long-lived access token)을 사용하여 사용자 인증을 처리한다.
다음과 같은 흐름으로 흘러간다.
1. 클라이언트가 파라미터로 클라이언트 ID, 리다이렉트 URI, 응답타입을 권한 서버에 전달한다. 정상적으로 인증이 되며느 권한 부여 코드를 클라이언트에게 보낸다. (응답 타입은 code
, token
일 수 있으며, 응답 타입이 token
일 경우가 암시적 승인 타입에 해당)
2. 권한 부여 코드를 받은 클라이언트는 권한 부여 코드를 사용하여 액세스 토큰을 권한 서버에 추가로 요청한다. 이떄 필요한 파라미터는 client-id, client-secret, 리다이렉트 uri, 인증 타입이다.
3. 마지막으로 응답받은 액세스 토큰을 사용하여 리소스 서버에 사용자 데이터를 요청한다.
'사용자명 + 비번' 인증 방식은 DB 에 저장된 사용자명과 비번이 같은지 한번만 요청하면 되지만 OAuth 방식은 최소 세번 요청한다. 하지만 OAuth2 는 회원가입 절차 없이 이미 있는 소셜 미디어 계정으로 인증하기 때문에 사용자입장에서는 더욱 편리하며, 서비스 측면에서는 회원 가입관련기능을 축소시키고, 소셜에서 제공하는 사용자의 정보를 가져올 수 있어서 좋음.