[OAuth2.0] 소셜 로그인 구현하기 -1- OAuth란?
[OAuth2.0] 소셜 로그인 구현하기 -2- 카카오 어플리케이션 등록
[OAuth2.0] 소셜 로그인 구현하기 -3- 카카오 로그인
[OAuth2.0] 소셜 로그인 구현하기 -4- 카카오, 네이버, 구글 로그인
0. 소셜 로그인?
- 지금 각종 서비스를 이용하기 위해 여러 웹 사이트를 들어가보면 많은 곳에서 "구글로 로그인", "카카오로 로그인", "네이버로 로그인" 등을 쉽게 볼 수 있다.
- 이는 해당 서비스를 위해 별도의 번거로운 회원가입 절차를 진행하지 않고도 이미 가지고 있는 카카오 계정, 페이스북 계정, 구글 계정, 일명 "뿌리 계정"으로 간편하게 서비스를 이용할 수 있도록 해주는 기능이다.
- 서비스별로 아이디와 암호를 모두 외우는 대신 뿌리계정 하나의 아이디와 암호만 외우는게 서비스 이용자에게 훨씬 쉽기 때문에 빠르게 보급되었다.
1. OAuth란?
- OAuth가 등장하기 이전에는 각 사이트 별로 사용자 Id와 Password를 입력해 인증을 하고 정보를 저장하는 방식이였다. 때문에 사용자 입장에서는 본인의 Id와 Password를 각 사이트에 등록해야 한다는 신뢰성적인 문제와 각 사이트에서는 사용자 정보를 관리하고 책임져야 하는 문제점이 있었다.
- 또한 구글, 야후, 아마존 등은 이러한 사용자의 아이디와 암호가 노출되지 않기 위해 각자 개발한 회사의 방법대로 사용자를 확인하고 인증하였는데, 제각각 다 달랐다.
- 제각각의 인증 방법을 표준화하고 위와 같은 신뢰성의 문제를 해결하기 위해 등장한 인증 방식이 OAuth이다.
- OAuth는 Open Authorization의 약자이며 요청시 해당 소셜 서비스의 사용자 정보를 바로 알려주지 않고 대신 액세스 토큰(AceesToken)이라는 것을 발급해주도록 함으로써 해당 사용자가 이용할 수 있는 해당 소셜 서비스의 기능들에 부분적으로만 접근할 수 있는 권한을 부여해주는 인증 절차이다.
2. OAuth 기본 용어 정리
- Resource Owner(User) : 서비스를 이용하려는 사용자를 말한다.
- Client(App) : 소셜 서비스와 연동시키고자 하는 서비스를 말한다.
- Resource Server (+ Authorization Server) : 연동하고자 하는 카카오, 페이스북, 구글 등 소셜 서비스의 서버를 말한다.
3. OAuth 간단 인증 과정
카카오로 예를 들어보자.
0. 준비
- OAuth 인증을 위해선 가장 먼저 이용하려는 Resource Server(카카오)에 내 Application 등록하여 Client id, Client secret을 받고 Authorized redirect uri를 설정할 수 있다.
1. 인증 코드(Authorization Code) 요청
- Client(내 웹 혹은 앱)에서 Resource Owner(사용자)가 Resource Server(카카오)로 리다이렉트하여 로그인하도록 유도한다.
- 이때 Resource Server의 URL에 0번에서 준비해둔 Client id, Client secret, Authorized redirect uri를 함께 보낸다.
- 로그인에 성공하면 Resource Server에서는 설정해둔 Authorized redirect uri에 Authorization Code가 전달된다.
2. 인증 코드로 토큰(Access Token&Refresh Token) 요청
- 1번에서 받은 코드, 0번에서 준비해둔 id, secret, redirect_uri로 액세스 토큰을 요청하고 이 네 가지 정보가 일치하면 Resource Server에서는 Access Toekenr과 Refresh Toekn이 client에 전달한다.
필드 | 타입 | 설명 |
access_token | string | 접근 토큰, 발급 후 expires_in 파라미터에 설정된 시간(초)이 지나면 만료됨 |
refresh_token | string | 갱신 토큰, 접근 토큰이 만료될 경우 접근 토큰을 다시 발급받을 때 사용 |
3. 액세스 토큰으로 API 호출
- 2에서 발급받은 Access Token으로 유저 정보를 Resource Server에 요청하면 Resource Server는 토큰의 유효성 확인 후 이상없을시 JSON형태로 미리 0에서 제공받고자 설정했던 정보를 리턴해준다.
어째 다소 생소할 수 있는데 요지는
Application등록 -> code요청&받기 -> code로 AccessToken요청&받기 -> AccessToken으로 사용자 정보 요청&받기
이게 끝이다. 코드를 보면 좀 더 이해하기 쉽다.
다음 글에서 라이브러리 없이 생으로 구현해보고
그 후 라이브러리로도 구현한 코드를 올릴 예정이다.
♣ 참고 및 인용
- https://datatracker.ietf.org/doc/html/rfc6750
- https://velog.io/@piecemaker/OAuth2-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
- https://velog.io/@sonypark/OAuth2-%EC%9D%B8%EC%A6%9D
- https://d2.naver.com/helloworld/24942
- https://it-eldorado.tistory.com/114
- https://developers.kakao.com/docs/latest/ko/kakaologin/common
'웹 개발 한걸음' 카테고리의 다른 글
[OAuth2.0] 소셜 로그인 구현하기 -4- 카카오, 네이버, 구글 로그인 (0) | 2021.08.03 |
---|---|
[OAuth2.0] 소셜 로그인 구현하기 -2- 카카오 어플리케이션 등록 (0) | 2021.07.28 |
[Spring+Mybatis] 로그인 구현하기 (0) | 2021.06.23 |
[Spring] 스프링 무작정 파헤쳐보기 -1- (0) | 2021.06.23 |
[Mybatis + Ajax] 게시물 수정 구현해보기 (0) | 2021.05.31 |