OAuth 2.0 의 인증방식 4가지
ref. 2 에 따르면 OAuth 2.0 이 제공하는 4가지 방법중에 open API 에서는 아래 2가지가 쓰인다고 한다. 이유는 아래 2가지는 3개의 주체로 이루어진 인증인데(3-legged OAuth), 다른 2가지는 2개의 주체로 이뤄져 있어서 라고 한다.(2-legged)- Authorization Code Grant : 자신만의 백엔드 서버를 갖고 동작하는 앱일 경우[ref. 4]
- Implicit Grant : 백엔드 서버 없이 순수 클라이언트 사이드에서만 동작하는 앱일 경우 사용[ref. 4]
아래 2개의 인증방식은 id/pw 가 노출될 위험이 있어서 인증된 client에만 사용되어야 한다고 한다.[ref. 1, 2]
- Password Credentials Grant
- Client Credentials Grant
비교적 안전하게 사용하는 방법
ref. 2 에서는 안전하게 OAuth 2.0 을 사용하는 방법을 이야기한다. 정리하면
- Authorization Code Grant 또는 Implicit Grant 를 사용
- access token 으로 Bearer token 을 사용
- HTTPS 를 이용
가장 많이 사용되는 Grant type인 Authorization Code 방식이나 Implicit 방식을 사용하고 access token으로서는 Bearer 토큰을 사용하며 HTTPS를 통해서 서비스하고 널리 사용되는 라이브러리들을 사용해서 구현한다면 OAuth 2.0은 안전하다고 할 수 있다.
Authorization Code Grant 와 Implicit Grant 의 자세한 설명은 ref. 1 을 통해 확인할 수 있다.
Sequence Diagram
ref5 에서 sequence diagram 을 확인할 수 있다.
Authorization Code Grant sequence diagram
from: https://developer.ebay.com/api-docs/static/oauth-authorization-code-grant.html |
Authorization code 를 받는 과정
기본적으로 여기서 말하는 application 은 "나의 google drive 에 있는 file 목록을 보여주는 application" 같은 류의 application 이다. 그래서 user 의 account 에 접속할 필요가 있다. 그래서 user 의 account 에 대한 접근을 허락받는 작업(authorization) 이 필요한 것이다.application 에서 OAuth 가 진행되면, application 이 user 를 auth server 가 가진 Grant Application Access page 로 redirect 시킨다. 이 때 client_id, redirect_uri 를 같이 보내준다. 이 때 redirect_uri 는 user 가 동의를 한 이후에 user를 application 으로 보내야 하기에 application 의 uri 이 될 것이다.
만약 application 이 web 이 아니라면, redirect_uri 에 url 외에 다른값(예를 들면urn:ietf:wg:oauth:2.0:oob 같은 값)을 넣게 된다. 이 경우는 보통 url 을 치고 가서 인증을 마치면 verification code 를 browser 화면에 뿌려준다. 그러면 이 verification code 를 가져다 application 에 붙여넣으면 된다.(예시: google drive 의 file 목록을 보여주는 예시)
그러면 이때 user 는 직접 로그인등을 하고, terms of use 등을 보고 accept 버튼을 누르게 된다.
user 가 동의를 하면(grant consent), auth server 가 user 를 아까 받은 redirect_uri 로 redirect 시킨다. 이때 auth server 가 authorization code 를 parameter 로 같이 넘겨준다.
Reference
- Joinc: OAuth2.0 소개
- OAuth 2.0 - Open API 인증을 위한 만능 도구상자 - tebica story
- 안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API > 12 page
- oauth2-restapi-server: 모바일 앱을 OAuth2.0으로 좀 더 안전하게! | Vine Brancho
- https://www.soapui.org/oauth2/oauth2-overview.html
- developer.ebay.com/api-docs/static/oauth-authorization-code-grant.html
댓글 없음:
댓글 쓰기