Спецификация: RFC 6749
OAuth 2.0 — отраслевой стандартный протокол авторизации. С его помощью приложение получает ограниченный доступ к ресурсу от имени пользователя или от своего имени.
Статус
Реализован частично. Отмечено пунктов: 26 из 28.
Grant type
- Authorization Code Grant (PKCE обязателен, кроме confidential-клиентов тенанта
standard) - Client Credentials Grant
- Refresh Token Grant
- Device Authorization Grant (RFC 8628) — не реализован
Удалены намеренно, по OAuth 2.1:
-
Implicit Grant -
Resource Owner Password Credentials Grant
PKCE
-
code_challengeобязателен в каждом authorization request, кроме confidential-клиентов тенантаstandard -
code_verifierобязателен при обмене, если code выдан с challenge, и отклоняется, если не выдан - Метод challenge
S256;code_challenge_methodобязателен, когда передан challenge -
Метод challenge— не принимаетсяplain
Refresh token
- Ротация refresh token — при каждом использовании выдается новый; grant с привязкой к отправителю продлевается на месте
- Старый refresh token сразу выводится из обращения при использовании
- Все семейство токенов отзывается, когда повторно предъявлен уже выведенный из обращения refresh token (
RefreshTokenFlowSpec) - С
Idempotency-Keyв refresh-запросе клиент может безопасно повторить запрос после потерянного ответа
Authorization code
- Code одноразовые; повторное предъявление использованного code отзывает выданные по нему токены
- Code можно обменять только тому клиенту, которому он выдан, и с тем же
redirect_uri
Использование bearer token
- Access token принимаются только в заголовке
Authorization - Токены в параметрах URL или в теле запроса отклоняются
- Короткоживущие access token с TTL для каждого клиента
-
Cache-Control: no-storeиPragma: no-cacheв ответах token endpoint
Аутентификация клиента
-
client_secret_basic— заголовокAuthorization: Basic -
client_secret_post— учетные данные клиента в теле запроса -
private_key_jwt— см. RFC 7523 -
tls_client_authиself_signed_tls_client_auth— см. RFC 8705 -
client_secret_jwt— не реализован
Endpoint’ы
-
GETиPOST /authorize— Authorization endpoint -
POST /token— Token endpoint -
POST /par— Pushed Authorization Requests (RFC 9126) -
POST /revoke— отзыв токенов (RFC 7009) -
POST /introspect— интроспекция токенов (RFC 7662) -
GET /.well-known/oauth-authorization-server— метаданные сервера (RFC 8414)
Примечания
- Какой клиент каким методом может аутентифицироваться, зависит от профиля безопасности тенанта. Тенант
fapi2допускает толькоprivate_key_jwtи два метода mutual TLS. - Публичный клиент на тенанте
standardаутентифицируется однимclient_idна/tokenи/revoke, но никогда на/introspect.
Куда смотреть
Справочник OpenAPI перечисляет файлы OpenAPI для /authorize, /token, /par, /introspect и /revoke.