我使用 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 令牌,就可以非常安全地完成此操作。
但是 IDP 没有用户的数字 ID。它只有一个唯一的编号。
我已经在控制台中找到了如何登出用户,输入应用程序和 rails c
uaa = UserAssociatedAccount.find_by(provider_name: “saml”, provider_uid: “123456”)
user = uaa.user
user.user_auth_tokens.destroy_all
所以我的想法是创建一个自定义端点,使用类似的方法
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 获取(参见上面的 rest)。
或者执行
uaa = UserAssociatedAccount.find_by(provider_name: “saml”, provider_uid: “123456”)
user = uaa.user
user.user_auth_tokens.destroy_all
是否有简单的插件可以将这段非常小的代码粘贴进去?我不是 Ruby 程序员,但这只有几行代码。这应该可以在几分钟内完成。
非常感谢您的帮助。