Федерация

Saschat поддерживает федерацию — пользователи с разных серверов авторизации могут взаимодействовать на одном Object Server'е.

Идентификация пользователей

Каждый пользователь идентифицируется парой userId + federation, где federation — URL Auth Server'а, выдавшего JWT-токен (поле iss в JWT).

Доверие федерациям

По умолчанию Object Server доверяет только своему Auth Server'у (настроенному через AUTH_SERVER_URL). Для приёма пользователей с других Auth Server'ов нужно явно добавить их федерации в список доверенных.

При проверке JWT:

  1. Извлекается issuer из токена

  2. Если issuer совпадает с AUTH_SERVER_URL или JWT_ISSUER — токен доверенный

  3. Иначе — ищется в таблице 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 }

Поле

Тип

Обязательное

Описание

authServerUrl

string

да

URL Auth Server'а федерации

name

string

да

Отображаемое название

trusted

boolean

нет

Флаг доверия (по умолчанию false)

Ответ (201): FederationResponse.

Ошибки: ALREADY_EXISTS — федерация с таким URL уже добавлена.

Удаление федерации

DELETE /servers/{serverId}/federations/{federationId}

Ответ (200): SuccessResponse.

Ошибки: NOT_FOUND.