Utilizo grupos SAML para autenticar usuarios en diferentes categorías. Cuando los grupos cambian, el usuario tiene que iniciar sesión. Quiero automatizar esto en mi IDP. Cuando los grupos cambian, utiliza la API para cerrar la sesión del usuario
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
Con un API-Token solo con el permiso de cierre de sesión (log_out), esto se puede hacer de forma muy segura.
Sin embargo, el IDP no tiene el ID numérico del usuario. Solo tiene un número único.
Ya descubrí cómo cerrar la sesión de un usuario a través de la consola, ingresando a la aplicación y a rails c
uaa = UserAssociatedAccount.find_by(provider_name: “saml”, provider_uid: “123456”)
user = uaa.user
user.user_auth_tokens.destroy_all
Así que mi idea fue crear un endpoint personalizado, con un uso similar
curl -X POST https://mydiscourse.org/custom/saml-logout/123456 -H “Api-Key: xxx” -H “Api-Username: Admin” -H “Accept: application/json”
Esto, o bien reenvía el auth_token recibido a la API oficial, probablemente el método más seguro. El ID se puede obtener a través de user.id (ver el resto arriba).
O ejecuta
uaa = UserAssociatedAccount.find_by(provider_name: “saml”, provider_uid: “123456”)
user = uaa.user
user.user_auth_tokens.destroy_all
¿Existen plugins sencillos donde pueda simplemente pegar este pequeño fragmento de código? No soy programador de Ruby, pero son muy pocas líneas de código. Esto debería ser factible en pocos minutos.
Muchas gracias por su ayuda.