Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails检测会话是否由SSO/SAML创建_Ruby On Rails_Devise_Single Sign On_Saml_Onelogin - Fatal编程技术网

Ruby on rails Rails检测会话是否由SSO/SAML创建

Ruby on rails Rails检测会话是否由SSO/SAML创建,ruby-on-rails,devise,single-sign-on,saml,onelogin,Ruby On Rails,Devise,Single Sign On,Saml,Onelogin,对于我的RubyonRails项目,我有modelAccount和modelUser用户属于帐户,帐户有许多用户 对于某些帐户,我希望允许用户使用常规设计路由(即由控制器设计/会话控制的路由)。对于其他一些帐户,我想让用户使用SAML/SSO登录 我已经使用gemsdesigne和designe\u saml\u authenticable成功地实现了这一点。根据帐户是否使用SAML/SSO,帐户中的用户可以使用任一路由登录。我正在使用Onelogin作为我的身份提供者 但是,对于注销。我希望其

对于我的RubyonRails项目,我有model
Account
和model
User
<代码>用户属于
帐户
帐户
有许多
用户

对于某些帐户,我希望允许用户使用常规设计路由(即由控制器设计/会话控制的路由)。对于其他一些帐户,我想让用户使用SAML/SSO登录

我已经使用gems
designe
designe\u saml\u authenticable
成功地实现了这一点。根据帐户是否使用SAML/SSO,帐户中的用户可以使用任一路由登录。我正在使用Onelogin作为我的身份提供者

但是,对于注销。我希望其帐户不使用SAML/SSO的用户通过注销

destroy\u user\u session DELETE/users/sign\u out(:format)designe/sessions\destroy

有了这个,我可以很容易地将
=链接到“注销”,销毁用户会话路径,方法::删除

另一方面,我希望帐户使用SAML/SSO的用户通过身份提供者的SLO路径注销。对于其中一个帐户,我已经尝试过了

=链接到“注销”https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy“

是Onelogin的SLO链接吗

我的项目的另一个方面是,帐户使用SAML/SSO的用户也可以使用常规的Desive登录路径登录。因此,他们可以选择使用SSO或设计登录路径

如果他们使用设计路由登录,我希望他们通过
destroy\u user\u session\u path
注销。如果他们使用SSO登录,我希望他们通过

有没有办法检测当前会话是否是使用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
我不想在我的users表中创建一列来记录他们是通过SAML/SSO登录,还是每次登录时设计。换句话说,没有迁移


谢谢

我看到的两个潜在选项要么在身份验证点,要么在会话中设置指示身份验证类型的内容。您可以从中驱动身份验证行为


或者,您可以向IdP发送isPassive=true的SAML请求,如果用户与IdP有有效会话,该请求将返回SAML响应。然后,您可以从该响应中驱动您的注销行为。

只是一个想法,但您能在
会话中弹出一些内容吗?