Authorization Code Flow (PKCE)
Схема Authorization Code Flow (PKCE):
Генерация Code Verifier:
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
Создание Code Challenge:
Code Challenge - это хэш Code Verifier закодированный в Base64.
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
Пример: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
Endpoint для переадресации: https://auth.regos.uz/oauth/authorize
Запрос отправляется методом [GET].
Параметры запроса: response_type, client_id, redirect_uri, code_challenge, code_challenge_method
... подробнее.
После успешной авторизации пользователь возвращается на указанный ранее URL (redirect_uri
), в параметрах которого содержится код авторизации code
. _*Код авторизации в дальнейшем обменивается на токен для доступа к API.
Endpoint для получения токена: https://auth.regos.uz/oauth/token
Запрос отправляется методом [POST].
Параметры а теле запроса: grant_type, code, redirect_uri, client_id, code_verifier
подробнее
В выходных параметрах метода [POST] .../oauth/token возвращается 3 токена:
access_token
) - Дает доступ к API. Передаётся в заголовках запросов.id_token
) - это JWT токен, который содержит информацию о пользователе в OpenID Connect.refresh_token
) - Используется для получение новых access_token
без повторной аутентификации.id_token
- это JWT токен, который содержит информацию о пользователе в OpenID Connect. Он состоит из 3-х частей, разделённых точками: заголовок (Header), данные (Payload), публичный ключ (Signature). Header и Payload закодированы в base64 и подписаны секретным ключом.
Пример ID токена:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiI5ZTg0YzY0Yi1mMjVlLTQ0YjktOTQ0ZC1mZDI3MjQ4YjUwYzEiLCJzdWIiOiJiNzJkMWE1OS00ZDk0LTQ3Y2YtYTg1ZS1hZTMzYjQ4M2Q1ZTIiLCJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJpYXQiOjE3NDc2NzEwMjEsImV4cCI6MTc0NzY3MTkyMSwiYXV0aF90aW1lIjoxNzQ3NjcxMDIxLCJlbWFpbCI6InVzZXIxMjNAZXhhbXBsZS5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJwaG9uZV9udW1iZXIiOiIrMTIzNDU2Nzg5MDEiLCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOiJ0cnVlIiwiZ2l2ZW5fbmFtZSI6IkpvaG4iLCJmYW1pbHlfbmFtZSI6IkRvZSIsInBpY3R1cmUiOiJodHRwczovL2V4YW1wbGUuY29tL3BpYy5qcGciLCJjb21wYW55IjoiQ29tcGFueSBYIiwiYXVkIjoiY2xpZW50XzEyM2FiY2Q0NWVmNjc4OTAxIn0.f4k3r4nD0mJw0rXyLp9qQz2v5sT8uG7hB6nM1kL9oP3iC4dA5eF6gH7jK8l
Заголовок содержит информацию о токене и алгоритме его подписи.
Пример заголовка:
{
"alg": "RS256",
"typ": "JWT"
}
Состав заголовка:
alg
- Алгоритм подписи (RSA подпись с SHA-256);typ
- Тип токена (JWT).Payload содержит информацию о пользователе в OpenID Connect.
Пример Payload:
{
"sid": "9e84c64b-f25e-44b9-944d-fd27248b50c1",
"sub": "b72d1a59-4d94-47cf-a85e-ae33b483d5e2",
"iss": "https://auth.regos.uz",
"iat": 1747671021,
"exp": 1747671921,
"auth_time": 1747671021,
"email": "user123@example.com",
"email_verified": "true",
"phone_number": "+998987654321",
"phone_number_verified": "true",
"given_name": "John",
"family_name": "Doe",
"picture": "https://example.com/pic.jpg",
"company": "Company Example",
"aud": "client_123abcd45ef678901"
}
Состав Payload:
sid
- Идентификатр сессии.sub
(subject) - Идентификатр авторизации пользователя;iss
(issuer) - URL сервиса авторизации;iat
(issued at) - Время, в которое был выдан токен (в формате Unix time);exp
(expiration) - Время окончания жизни токена (в формате Unix time);auth_time
- Время, в которое произошла авторизация;email
- Адрес электронной почты пользователя;email_verified
- Статус верификации электронной почты пользователя: true
- Верифицирована, false
- Не верифицирована;phone_number
- Номер телефона пользователя (в формате +XXXXXXXXXXXX
);phone_number_verified
- Статус верификации номера телефона пользователя: true
- Верифицирован, false
- Не верифицирован;given_name
- Имя пользователя;family_name
- Фамилия пользователя;picture
- Изображения пользователя;company
- Наименование предприятия пользователя;aud
(audience) - Идентификатр пользователя.