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