OAuth
Термины
В данном примере пользователь имеет на Google Drive фотографии, которые
хочет распечатать на стороннем сервисе
Protected Resource - фотографии на Google Drive
Resource Owner - пользователь которому принадлежат фото на диске. У него есть доступ
к Protected Resource и возоможность выдавать доступ к нему.
Resource Server - сервис на котором хранится Protected Resource. В нашем случае это Google Drive
Client - приложение, которому нужен доступ к Protected Resource. В нашем случае это Printing Service
Authorization Server - сервис, который отвечает за то, что доступ к Protected Resource
получает только авторизованные пользователи. Он выдаёт Access Tokens клиенту
Процесс
Вариант 1: Authorization Code Flow
1) Пользователь (Resource Owner) обращается к клиенту (Client) с запросом о печате своих фото (Protected Resource)
с Google Drive (Resource Server)
User: …«Напечатай фотографии»… → Client
2) Printing Service (Client) обращается к Authorization Server с сообщением о том, что ему нужно распечатать фотоки
пользователя (Resource Owner) и передаёт данные о пользователе и о фотографиях, доступ к которым ему нужен.
Client: … «Нужен доступ к таким-то фотографиям этого пользователя»… → Authorization Server
3) Authorization Server обращается к Resource Owner и сообщает, что Client запросил доступ к Protected Resourse и
хочет выполнить определённые действия. Вопрос - согласен ли на это Resource Owner
Authorization Server: …«Согласен ли ты разрешить определённые действия с Protected Resource?»…
→ Resource Owner
4) Resource Owner отвечает, что всё ОК
Resource Owner: …« Да, я согласен предоставить определённый доступ к определённым Protected Resource»…
→ Authorization Server
5) Authorizaion Server отправляет клиенту (Client)
Authorization Token
. Обычно это короткоживущий токен.
Authorization Server: …Authorization Token… → Client
6) Client запрашивает у Autorization Server
Access Token
. К этому запросу
он присоединяет полученный ранее
Authorization Token
.
Client: …« Дай мне Access Token у меня есть Authorization Token, вот он: »
+ Authorization Token… → Authorization Server
7) Authorizaion Server проверяет
Authorization Token
и отправляет на Client
Access Token
Authorization Server: …Access Token… → Client
8) Client
и отправляет на Resource Server
Access Token
и запрашивает доступ к
Protected Resource
Client: …«Дай мне доступ к Protected Resource, у меня есть Access Token вот он:» + Access Token …
→ Resource Server
9) Resource Server
проверяет
Access Token
и выдает Client доступ к
Protected Resource
Resource Server: … Доступ к Protected Resource … → Client
Кратко
|
Откуда
|
|
Куда
|
Сообщение
|
|
Resource Owner
|
→
|
Client
|
Сделай что-то с моим Protected Resource
|
|
Client
|
→
|
Authorization Server
|
Нужен доступ к Protected Resource
|
|
Authorization Server
|
→
|
Resource Owner
|
Давать Client доступ к твоему Protected Resource?
|
|
Resource Owner
|
→
|
Authorization Server
|
Давай
|
|
Authorization Server
|
→
|
Client
|
Authorization Token
|
|
Client
|
→
|
Authorization Server
|
Authorization Token
+
Дай мне Access Token
|
|
Authorization Server
|
→
|
Client
|
Access Token
|
|
Client
|
→
|
Resource Server
|
Access Token + Дай мне доступ к Protected Resource
|
|
Resource Server
|
→
|
Client
|
Доступ к Protected Resource
|