OAuth 2.0
OAuth는 인증을 위한 표준 프로토콜의 한 종류로, 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 부여하는 프로세스를 단순화한 프로토콜이다.
주요 용어
- Resource Owner: 액세스 중인 리소스의 소유자
- Client: Resource owner를 대신해 보호된 리소스에 액세스하는 응용 프로그램
- Resource server: Clinet의 요청을 수락하고 응답하는 서버
- Authorization server: Resource server가 액세스 토큰을 발급받는 서버
- Authorization grant: 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명
- Authorization code: access token을 발급받기 전에 필요한 code
- Access token: 보호된 리소스에 액세스하는 데 사용되는 credentials(자격)
- Scope: 주어진 액세스 토큰을 사용해 액세스할 수 있는 리소스의 범위
예시
- Resource Owner:
user1
- client:
App
,
- Resource server :
Naver
,
- Authorization server:
Naver
,
- scope:
profile
Grant type
client가 액세스 토큰을 얻는 방법
종류
- Authorization Code Grant Type
- Refresh Token Grant Type 등
Authorization Code Grant Type
액세스 토큰을 받아오기 위해서 먼저 Authoriztion code를 받아 액세스 토큰과 교환하는 방법
목적
: 보안성을 강화하기 위해
client에서 client-secret을 공유하고 액세스 토큰을 가지고 오는 것은 탈취될 위험이 있기 때문에 client에선느 authorization code만 받아오고 server에서 access token 요청을 진행함.
- 예를 들어
구글 소셜 로그인을 지원하는 웹엡이 있을 경우
- user는 앱 client를 통해서 구글 로그인을 요청
- 앱 client는 구글에다가 사용자 확인을 요청함.
- 구글은 사용자에게 인증 및 정보제공 동의 요청 => user가 동의
- 구글이 앱 client에 authorization code 제공
- 앱은 authorization code를 구글에게 전달해 access token 획득
- 앱 client는 앱 server로 access token을 전송하여 리소스 요청
- 앱 server는 access token을 검증하여 인증된 사용자일 경우 리소스 응답
Refresh Token Grant Type
유효 기간이 지나 만료된 액세스 토큰을 편리하게 다시 받아오기 위해서 사용하는 방법. access token 보다 refresh token의 유효기간을 더 길게 설정함.
- user가 앱에 리소스 요청
- 앱 client는 user의 access token 검증
- 유효기간이 만료되었을 경우 user의 refresh token으로 인증서버에 access token 요청
- 인증 서버는 access token을 반환
- 앱 client는 access token을 리소스 서버에 전달하여 리소스에 액세스 가능