소셜 로그인을 구현하기 위해 'OAuth'를 알아보고, 코드로 구현할 것이다.
- OAuth란?
OAuth(Open Authorization)은 사용자 인증을 위한 기술 표준으로서, 사용자 이름(Username), 비밀번호(Password) 등 실제 사용자 자격을 공유하지 않고, 한 서비스에서 다른 서비스로 권한 부여를 전달하기 위한 프로토콜이다.
우리가 자주 사용하는 '소셜로그인'이 이를 활용한 방법이다.
'X' 의 로그인 화면을 보면, 'X'에 직접 계정을 만드는 방식도 존재하지만 'Google', 'Apple'과 같은 다른 서비스의 계정을 통해, 'X'에 가입할 수 있다.
- OAuth 프로세스 절차
OAuth 프로세스 절차는 크게 4단계로 구성된다.
0. 용어 정리
깃 허브를 구글 계정을 통해 회원가입 하는 상황으로 가정하겠다.
Resource Owner (사용자) : User, 사용자
Client (깃 허브) : 내가 이용하고자 하는 서비스
Resource Server (구글) : 사용자 데이터를 가지고 있는 기존 서비스
1. 등록 (register)
- 'Client'가 'Resource Server'에게 'Client ID', 'Client Secret', 'Redirect URL'을 입력하여 사전 연결을 진행하는 단계
2. Resource Owner의 승인
- 'Resource Owner'로 부터 'Resource Server'에 있는 "당신의 정보/기능을 사용해도 되겠냐" 라고
Client가 승인을 구하는 단계
=> 'Client' 가 'R.O' 에게 'R.S' 접근 동의를 얻는 과정
2-1). 'R.O' 가 서비스 이용을 위해, 'Client'에 접속
2-2). 'Client' 에서 'R.O' 에 'R.S' 접근을 승인 받기위해 " 'R.S' 승인 허용" 링크가 달린 버튼을 보여줌.
2-3). 'ClientID' 와 원하는 기능을 사용하기 위한 데이터인 'Scope', 'RedirectURL' 의 정보가 담긴 링크로 R.O 가 R.S 에 접근
- Client ID = 1 에 해당하는 Client 가 scope에 해당하는 데이터에 접근해도 된다는 것을 승인하기 위한 링크
+) 실제 구글 로그인 링크
2-4). R.O 가 승인을 한다면, R.S 는 R.O의 식별자인 'User ID' 와 Client 에 대해 승인된 데이터인 'Scope'를 기억하고 있는다.
3. Resource Server의 승인
- Access Token 을 발급하기 위한 사전 단계 (Authorization Code란 것을 R.S가 발급하여 마지막 검증 진행)
- " 'R.O' 가 'Client' 의 'R.S' 접근 승인 여부" 를 'R.S' 가 확인하는 과정
3-1) R.S 가 Authorization Code를 생성한 후, Resource Owner가 "Redirect URL + Authorization Code" URL로 이동시킨다.
3-2) R.O 는 해당 경로로 이동되어 Client에게 Authorization Code를 전달한다.
- Client는 Authorization Code를 저장한다.
3-3) Client는 'Client ID', 'Client Secret', 'Authorization Code'를 포함하여, R.S에 접속한다.
이 과정을 통해,
Client ID, Client Secret, Authorization Code 가 모두 일치하면, R.O 가 Client 의 R.S 접근을 허용한 것을 확인하여,
R.S 도 승인을 하게된다.
4. Access Token 발급
- 3자간의 모든 검증이 완료되었다. R.S에 최소한의 권한으로 접근가능한 AccessToken을 발급한다.
4-1) 검증이 끝났기 때문에, Client 와 R.S는 Authorization Code를 제거한다.
- R.S는 Access Token 을 생성한다.
4-2) R.S 는 Client 에게 Access Token을 발급한다.
+) Refresh Token
- 기간이 만료된 Access Token을 재발급하는 과정
- 서비스 마다 Token 재발급 방식이 다르다.
- Access Token이 만료되고, Refresh Token을 발급한 후, Refresh Token을 계속 발급하는 방식이 있다.
- Access Token이 만료되고, Access Token을 계속 발급하는 방식이 있다.