Изменил(а) на 'OpenID_Connect.md'
parent
b8914651c0
commit
ed2de71383
|
@ -35,13 +35,20 @@
|
|||
Если никакие данные о пользователе не найдены, веб-сайту необходимо установить личность пользователя.
|
||||
Для этого веб-сайт перенаправляет пользователя на сервер авторизации oidc и включает в запрос Сlient ID, Redirect Uri, Response Type и одно или несколько Scopes (разрешений), которые ему необходимы (см. рисунок 1).
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[User]-->|cookies|B(Website)
|
||||
B--> C{User authorized?}
|
||||
C--> D[Yes] & E[No]
|
||||
D--> F[Grant access]
|
||||
E-->|Client_ID, Redirect_Uri, <br> Response_Type, cookies|G[oidc]
|
||||
```
|
||||
*Рисунок 1. Пользователь посещает веб-сайт*
|
||||
|
||||
```
|
||||
GET https://staging.ps.radium-it.ru/oidc/authorize?scope=openid&redirect_uri=website/cb&client_id=AC!8&response_type=id_token"
|
||||
Host: ps.radium-it.ru
|
||||
```
|
||||
|
||||
*Рисунок 1. Диаграмма первого шага, когда пользователь заходит на веб-сайт*
|
||||
|
||||
Вместе с запросом от веб-сайта сервер авторизации oidc получает cookie-файлы, и на основании полученных данных решает - авторизован данный пользователь или нет.
|
||||
|
||||
Если конечный пользователь уже был авторизован, то autorization_endpoint спрашивает у базы данных, было ли получено согласие пользователя для этого веб-сайта.
|
||||
|
@ -65,7 +72,17 @@ HTTP/1.1 302 Redirect
|
|||
Location: {redirect_uri}
|
||||
```
|
||||
|
||||
*Рисунок 2. Диаграмма потока данных, когда пользователь авторизован на веб-ресурсе*
|
||||
```mermaid
|
||||
flowchart LR
|
||||
G[oidc]--> C{User authorized?}
|
||||
C--> D[Yes] & E[No]
|
||||
D--> H{Consent<br>obtained?}
|
||||
H--> I[Yes] & J[No]
|
||||
I-->B(Website)
|
||||
J--> K[/Web consent/]--> B(Website)
|
||||
E-->AF[/Authorization form/]
|
||||
```
|
||||
*Рисунок 3. Аутентификация пользователя на сервере авторизации*
|
||||
|
||||
Если же сервер решает, что пользователь никогда не был авторизован, то сервер авторизации oidc просит конечного пользователя авторизоваться.
|
||||
Переходим к этапу 2.
|
||||
|
@ -111,6 +128,17 @@ Location: {redirect_uri}
|
|||
В случае, если сервер авторизации oidc не получил никакого ответа, после перехода по ссылке *magic link* в письме пользователь видит форму согласия на обработку персональных данных Consent Collection, в которой помимо предзаполненного поля с введенным ранее email, содержатся также дополнительные поля, например: [имя], [фамилия], [место работы] и т.д.
|
||||
Все данные, собранные с помощью данной формы, также сохраняются в таблицу User Info (см. рисунок 6).
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
AF[/Authorization form/]-->|Email|G[oidc]
|
||||
G[oidc]-->|Magic link|em[email]-->OD[odic]-->AD{Any data<br>about User?}
|
||||
A[User]-->|Click on Magic link|em[Email]
|
||||
AD--> D[Yes] & E[No]
|
||||
D-->DB[(Database)]-->FC[/Full Consent/]
|
||||
E[No]-->FC[/Full Consent/]
|
||||
FC[/Full Consent/]-->UI[(User Info)]
|
||||
```
|
||||
|
||||
*Рисунок 6. Диаграмма потока данных при сборе данных о пользователе*
|
||||
|
||||
### Этап 5. Выдача JWT
|
||||
|
@ -125,6 +153,12 @@ Location: {redirect_uri}?id_token
|
|||
При этом id_token (JWT) представляет из себя JSON файл, содержащий информацию, необходимую для аутентификации и проверки достоверности информации и веб-сайт может извлечь из JWT различную информацию, такую как ID, имя пользователя, время входа в учетную запись, срок окончания действия ID Token'а, наличие попыток вмешательства в JWT, например, `sub+email+collected_data+signature`.
|
||||
Signature содержит в себе закрытый ключ, которым сервер авторизации oidc подписывает конкретный JWT.
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
OD[oidc]-->|JWT: sub+email+collected_data+signature|A[User]-->|JWT|B(Website)
|
||||
```
|
||||
*Рисунок 7. Выдача токена пользователю*
|
||||
|
||||
Чтобы продолжить работу с данными веб-сайт должен проверить подписанный JWT, для этого он обращается к конечной точке jwks_endpoint, с которой может получить открытые ключи для проверки подписи JWT.
|
||||
|
||||
Цель достигнута.
|
||||
|
|
Loading…
Reference in New Issue