[OAuth 2.0 마스터] 2장_OAuth 2.0 개요
시나리오
다음 시나리오로 시작하자.
사용자가 GoodApp 이라는 App 을 사용한다고 하자.
GoodApp 은 사용자의 페이스북에 등록된 친구들을 추천해줄 수 있다.
- 사용자가 GoodApp 에게 친구 추천을 요청
- GoodApp 은 먼저 자신을 인가해달라고 대답
- GoodApp 은 페이스북에 대한 접근 권한을 받기 위해, 사용자가 페이스북에 로그인하도록 함
- 페이스북은 GoodApp 이 사용자의 친구 목록에 접근하도록 허용할 것인지 질문
- 사용자는 네 라고 대답
- 페이스북은 GoodApp 에게 사용자의 친구 목록을 전달
- GoodApp 은 이 친구 목록을 이용해서 사용자에게 친구 추천
Client
GoodApp 에게 사용자의 친구 목록에 접근할 수 있는 권한이 부여된 이후에는, GoodApp 과 페이스분 간 정보 교환을 위한 상호 작용이 이뤄진다.
이 상호 작용은, 클라이언트 어플리케이션의 능력에 따라 달라진다.
Untrusted Client
기밀 정보를 안전한게 저장거나 전송할 수 없는 애플리케이션이다.
예를 들면, HTML/Javascript 애플리케이션으로서 정보를 안전하게 저장하는 서버가 없는 경우이다.
Trusted Client
기밀 정보를 안전한게 저장하고 전송할 수 있는 애플리케이션이다.
예를 들면, 백엔드 서버거 존재하는 클라이언트-서버-데이터베이스 구조의 애플리케이션이다.
Grant
OAuth 2.0 은 정보 교환을 위해, 클라이언트 어플리케이션에 따라 다양한 방법을 지원한다.
이것이 Grant 유형이다. 두 가지가 있다.
Implicit Grant : Client Side Workflow
GoodApp 이 웹 브라우저 상에서 동작하는 웹 애플리케이션이라고 하자.
- 사용자가 GoodApp 에게 친구 추천을 요청
- GoodApp 은 먼저 자신을 인가해달라고 대답
- GoodApp 은 페이스북에 대한 접근 권한을 받기 위해, 사용자가 페이스북에 로그인하도록 함
- 페이스북은 GoodApp 이 사용자의 친구 목록에 접근하도록 허용할 것인지 질문
- 사용자는 네 라고 대답
- 페이스북은 GoodApp 에게
사용자의 친구 목록에 접근하는 데 사용할 수 있는 키
를 전달 - GoodApp 은 이 키를 이용해서 페이스북에게 사용자의 친구 목록 요청
- 페이스북은 이 키를 확인해서 GoodApp 에게 친구 목록 전달
- GoodApp 은 이 친구 목록을 이용해서 사용자에게 친구 추천
위에서, 사용자의 친구 목록에 접근하는 데 사용할 수 있는 키
가 OAuth 2.0 에서는 Access Token 이라고 한다.
Access Token 은 GoodApp 에게 사용자의 친구 목록에 접근할 수 있는 권한이 부여되었다는 의미이다.
Authorization Code Grant : Service Side Workflow
GoodApp 이 백엔드 서버거 존재하는 클라이언트-서버-데이터베이스 애플리케이션이라고 하자.
- 사용자가 GoodApp 에게 친구 추천을 요청
- GoodApp 은 먼저 자신을 인가해달라고 대답
- GoodApp 은 페이스북에 대한 접근 권한을 받기 위해, 사용자가 페이스북에 로그인하도록 함
- 페이스북은 GoodApp 이 사용자의 친구 목록에 접근하도록 허용할 것인지 질문
- 사용자는 네 라고 대답
- 페이스북은 GoodApp 서버에게
사용자의 페이스북 친구 목록에 접근하는데 사용할 수 있는 키와 교환할 수 있는 Tag
를 전달 - GoodApp 은 이 Tag 를 이용해서 페이스북에게
사용자의 친구 목록을 전달 받는 데 사용하는 키
를 요청 - 페이스북은 이 Tag 를 확인해서 GoodApp 에게 키를 전달
- GoodApp 은 이 키를 이용해서 페이스북에게 사용자의 친구 목록 요청
- 페이스북은 이 키를 확인해서 GoodApp 에게 친구 목록 전달
- GoodApp 은 이 친구 목록을 이용해서 사용자에게 친구 추천
위에서, 사용자의 페이스북 친구 목록에 접근하는데 사용할 수 있는 키와 교환할 수 있는 Tag
는 일단 한 번 사용된 이후에는 다른 키를 얻기 위해 재사용할 수 없다.
OAuth 2.0 에서는 위의 Tag 를 Authorization Code 라고 하고, 위의 Key 를 Access Token 이라고 한다.
OAuth 2.0 마스터 <찰스 비히스>