Федерация
Saschat поддерживает федерацию — пользователи с разных серверов авторизации могут взаимодействовать на одном Object Server'е.
Идентификация пользователей
Каждый пользователь идентифицируется парой userId + federation, где federation — URL Auth Server'а, выдавшего JWT-токен (поле iss в JWT).
Доверие федерациям
По умолчанию Object Server доверяет только своему Auth Server'у (настроенному через AUTH_SERVER_URL). Для приёма пользователей с других Auth Server'ов нужно явно добавить их федерации в список доверенных.
При проверке JWT:
Извлекается
issuerиз токенаЕсли issuer совпадает с
AUTH_SERVER_URLилиJWT_ISSUER— токен доверенныйИначе — ищется в таблице AllowedFederations; если не найден — 401
Список федераций сервера
GET /servers/{serverId}/federations
Ответ (200):
[ { "id": "federation-uuid", "authServerUrl": "https://auth.remote-server.com", "name": "Remote Server", "trusted": true } ]
Добавление федерации
POST /servers/{serverId}/federations
Тело запроса:
{ "authServerUrl": "https://auth.remote-server.com", "name": "Remote Server", "trusted": true }
Ответ (201): FederationResponse.
Ошибки: ALREADY_EXISTS — федерация с таким URL уже добавлена.
Удаление федерации
DELETE /servers/{serverId}/federations/{federationId}
Ответ (200): SuccessResponse.
Ошибки: NOT_FOUND.