【发布时间】:2019-07-29 20:51:29
【问题描述】:
对于我的 Ruby on Rails 项目,我有模型 Account 和模型 User。 User 属于account,而account 有很多users。
对于某些帐户,我想让用户使用常规的设计路线(即由控制器设计/会话控制的路线)。对于其他一些帐户,我想让用户使用 SAML/SSO 登录。
我已经使用 gems Devise 和 devise_saml_authenticatable 成功实现了这一点。其账户中的用户可以使用任一路由登录,具体取决于他们的账户是否使用 SAML/SSO。我使用 Onelogin 作为我的身份提供者。
但是,对于注销。我希望帐户不使用 SAML/SSO 的用户通过
注销destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy。
有了这个我可以很容易地把=link_to 'Logout', destroy_user_session_path, method: :delete
另一方面,我希望其帐户使用 SAML/SSO 的用户通过身份提供者的 SLO 路径注销。对于此类帐户之一,我已经尝试过
= link_to "Logout", 'https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy'
https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy 是 Onelogin 的 SLO 链接
我的项目的另一个方面是,其帐户确实使用 SAML/SSO 的用户也可以使用常规设计登录路由登录。因此,他们可以选择使用 SSO 或设计登录路径。
如果他们使用设计路由登录,我希望他们通过destroy_user_session_path 注销。如果他们使用 SSO 登录,我希望他们通过 https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy 注销
有没有办法检测当前会话是否使用 SAML/SSO 登录,以便我可以这样做
if signed_in_with_sso
= link_to 'Log out', https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy
else
= link_to 'Log out', destroy_user_session_path, method: :delete
我不想在我的用户表中创建一个列来记录他们是通过 SAML/SSO 登录还是只是在他们每次登录时进行设计。换句话说,没有迁移。
谢谢!
【问题讨论】:
-
只是一个想法,但你能在
session中添加一些东西吗?
标签: ruby-on-rails devise single-sign-on saml onelogin