Eu uso grupos SAML para autenticar usuários em diferentes categorias. Quando os grupos mudam, o usuário tem que fazer login. Quero automatizar isso no meu IDP. Quando os grupos mudam, ele usa a API para deslogar o usuário
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
Com um API-Token apenas com a permissão de log_out, isso pode ser feito de forma muito segura.
No entanto, o IDP não tem o ID numérico do usuário. Ele tem apenas um número único.
Já descobri como deslogar um usuário via console, entrando no app e no rails c
uaa = UserAssociatedAccount.find_by(provider_name: “saml”, provider_uid: “123456”)
user = uaa.user
user.user_auth_tokens.destroy_all
Então, minha ideia foi criar um endpoint personalizado, com uso similar
curl -X POST https://mydiscourse.org/custom/saml-logout/123456 -H “Api-Key: xxx” -H “Api-Username: Admin” -H “Accept: application/json”
Isso pode apenas encaminhar o auth_token recebido para a API oficial, provavelmente o método mais seguro. O ID pode ser obtido via user.id (veja o restante acima)
Ou pode executar
uaa = UserAssociatedAccount.find_by(provider_name: “saml”, provider_uid: “123456”)
user = uaa.user
user.user_auth_tokens.destroy_all
Existem plugins simples onde posso simplesmente colar este pequeno trecho de código? Eu não sou programador Ruby, mas são poucas linhas de código. Isso deve ser viável em poucos minutos.
Muito obrigado pela sua ajuda.