Я использую группы SAML для аутентификации пользователей в разных категориях. При изменении групп пользователю приходится снова входить в систему. Я хочу автоматизировать этот процесс в своём IDP. При изменении групп он использует API для принудительного выхода пользователя:
curl -X POST "https://mydiscourse.org/admin/users//log_out.json" -H "Content-Type: application/json" -H "Api-Key: XXXX" -H "Api-Username: Admin" -v
Используя только API-токен с правом log_out, это можно сделать максимально безопасно.
Однако в IDP нет числового ID пользователя. Там есть только уникальный номер.
Я уже выяснил, как выполнить выход пользователя через консоль приложения и rails c:
uaa = UserAssociatedAccount.find_by(provider_name: "saml", provider_uid: "123456")
user = uaa.user
user.user_auth_tokens.destroy_all
Поэтому моя идея заключалась в создании пользовательской конечной точки (endpoint) с аналогичным использованием:
curl -X POST https://mydiscourse.org/custom/saml-logout/123456 -H "Api-Key: xxx" -H "Api-Username: Admin" -H "Accept: application/json"
Она либо просто пересылает полученный auth_token в официальное API (вероятно, самый безопасный метод). ID можно получить через user.id (см. код выше).
Или она выполняет:
uaa = UserAssociatedAccount.find_by(provider_name: "saml", provider_uid: "123456")
user = uaa.user
user.user_auth_tokens.destroy_all
Существуют ли простые плагины, в которые можно просто вставить этот очень небольшой фрагмент кода? Я не программист на Ruby, но это всего несколько строк. Это должно быть выполнимо за несколько минут.
Большое спасибо за помощь.