如何整合 Devise 和 SAML?

How to integrate Devise and SAML?

让 SAML 与广泛使用的 https://github.com/plataformatec/devise 一起工作的最佳方法是什么?

https://github.com/apokalipto/devise_saml_authenticatable 不执行 signed/encrypted 身份验证请求,这对我们来说是一个交易破坏者,通常的来源也没有帮助。

例如,Devise 的 Omniauth 集成需要 Onelogin 的 SAML 连接器不提供的应用程序 ID 和密码。

我最近不得不处理使用 Shibboleth for SSO 将 rails 应用程序连接到大学网络的问题。我最终在带有 mod-shib2 的 Apache 上使用了 devise、omniauth 和 运行。我不确定您是否专门使用 Shibboleth,但它建立在 SAML 之上。轻量级 rack-saml 实现对我不起作用。

原来Dev​​ise config的参数是错误的。我在 fork/PR:

中记录了正确的设置

https://github.com/omniauth/omniauth-saml#devise-integration

因此,对我有用的答案是使用 https://github.com/PracticallyGreen/omniauth-saml#usage and then to follow devise's omniauth tutorial at https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview 中概述的 gemlfile 和 omniauth.rb 设置,将 facebook 替换为 SAML。请注意,您可能不需要教程中提到的 UID 字段,具体取决于您的 IdP 存储其用户的方式(如果您使用瞬态 nameid 格式,则不会获得永久 UID)。使用在 IdP 中唯一标识您的用户的任何内容,这很可能是电子邮件地址。

ioblomov 添加的 devise.rb 内容似乎没有添加任何内容,实际上,如果您在执行 omniauth.rb 文件的同时执行此操作,则会导致问题。这会导致 IdP 执行两次回调,一次使用 omniauth.rb 设置,另一个使用 devise.rb 设置。鉴于 devise.rb 设置不完整(例如,他们没有消费者 url),我看不出单独使用它如何工作。我不清楚 "devise integration" 在 omniauth-saml 的上下文中甚至意味着什么。一旦你得到一个认证响应(你将只使用 omniauth.rb 设置),那么你所要做的就是在你的回调控制器中使用设计方法 sign_in_and_redirect 然后你就拥有了所有通常的为该用户设计可用的东西。我将向 omniauth-saml 提交 PR,但我不会屏住呼吸,因为该项目目前似乎只是偶尔维护。