GrantForge поставляется со встроенным сервером авторизации на базе Spring Authorization Server, который следует требованиям безопасности OAuth 2.1: поддерживается только поток кода авторизации (с обязательным PKCE), refresh-токены и учётные данные клиента (client credentials); неявный поток и получение токена по паролю не поддерживаются.

Документ discovery и эндпоинты
Документ discovery: <GrantForge>/.well-known/openid-configuration; его можно скопировать прямо со страницы Управление платформой → Сервер авторизации. Issuer по умолчанию совпадает с адресом, по которому приходит запрос; при развёртывании за обратным прокси зафиксируйте его параметром grantforge.oauth.issuer.
| Эндпоинт | Описание |
|---|---|
/oauth2/authorize |
Поток кода авторизации; все клиенты обязаны использовать PKCE (S256) |
/oauth2/token |
Код авторизации, refresh-токен, учётные данные клиента. Refresh-токены ротируются при каждом использовании; повторное появление старого токена приводит к отзыву всего гранта |
/oauth2/revoke |
Отзыв токена |
/oauth2/jwks |
Открытые ключи подписи (RS256) |
/userinfo |
sub, tid, preferred_username; скоуп profile добавляет name, скоуп email добавляет email |
Access token и ID token содержат tid (идентификатор тенанта) и preferred_username; auth_time в ID token — это момент, когда пользователь вошёл в консоль.
Клиенты
Выберите приложение в разделе Управление платформой → Каталог ресурсов и нажмите «OAuth-клиенты», чтобы управлять его клиентами.
| Настройка | Правила |
|---|---|
| Тип | Публичный клиент — для браузерных, мобильных и иных приложений, которые не умеют хранить секрет; конфиденциальный клиент — для серверных приложений, имеет секрет |
| Redirect URI | До 10 абсолютных URI; подстановочные знаки и фрагменты запрещены. Должен быть https либо локальный http (localhost, 127.0.0.1, [::1]), либо пользовательская схема нативного приложения |
| scope | openid, profile, email, permissions (запрос прав), catalog (объявление сущностей данных, только для client credentials) |
| Типы грантов | Код авторизации, refresh-токен (требует гранта кода авторизации; выдаётся только конфиденциальным клиентам), client credentials (только конфиденциальные клиенты) |
| Время жизни токенов | Access token: от 1 минуты до 24 часов (по умолчанию 15 минут); refresh-токен: от 1 часа до 90 дней (по умолчанию 30 дней) |
Секрет конфиденциального клиента показывается только один раз — при регистрации или ротации, — а GrantForge хранит лишь его хеш. При ротации можно задать период сосуществования (до 7 дней), в течение которого действуют и старый, и новый секрет, что упрощает обновления без простоев.
Правила работы с токенами
- Токены хранятся в виде хешей: даже при утечке базы данных готовых к использованию токенов не остаётся.
- После любого из следующих событий выданные токены перестают продлеваться: клиент отключён или удалён, учётная запись отключена или заблокирована, учётной записи требуется сменить пароль, тенант отключён.
- Кросс-доменные вызовы из браузера: GrantForge разрешает кросс-доменные вызовы эндпоинтов токена и открытого API без cookies с источников (origin), на которых размещены redirect URI включённого клиента.
Ключи подписи
Ключи подписи генерируются с помощью RSA 2048, приватные ключи хранятся в зашифрованном виде. По умолчанию они ротируются автоматически каждые 90 дней (grantforge.oauth.signing-key-rotation), а старые открытые ключи ещё 2 дня публикуются в JWKS (signing-key-retention), чтобы токены, выданные до ротации, оставались проверяемыми. При необходимости ротацию можно запустить немедленно со страницы сервера авторизации (чувствительная операция; учётным записям с включённой двухфакторной проверкой потребуется пройти её повторно).
Вход в другие системы с помощью GrantForge
Любая система, поддерживающая OpenID Connect (Grafana, GitLab, Jenkins и т. д.), может использовать GrantForge как свой IdP: создайте для неё приложение и конфиденциального клиента в каталоге ресурсов, а затем укажите в OIDC-конфигурации этой системы URL документа discovery, client_id и секрет. В обратную сторону GrantForge тоже умеет выполнять вход через другие IdP; см. Источники идентичности.
