【问题标题】:Using Shibboleth Attributes as Ruby Environment Variables (Phusion Passenger)使用 Shibboleth 属性作为 Ruby 环境变量(Phusion 乘客)
【发布时间】:2016-11-27 01:12:19
【问题描述】:

我正在尝试为正在开发 Ruby on Rails 的 Web 门户实施身份验证(即,我想保护某些页面以供管理员访问)。它受 Shibboleth 保护,我有一个用户数据库(用于我没有从 Shibboleth 获得的信息)。服务器在 apache2.4 上运行 Phusion 乘客

我有两个问题:

  • 我计划实现这一点的方式是使用 if-else 条件。我将从 Shibboleth 获取一个属性,将其与我的用户数据库密钥匹配以识别用户。如果它是管理员,那么我将显示特定于管理员的内容。有没有更好的实现方式?

    • 如何在 ruby​​ 上设置 Shibboleth 传递的环境变量?以及如何在 HTML 页面中使用它们来实现上面的 if-else?

如果需要更多信息,请告诉我。

【问题讨论】:

  • 请澄清您所说的“如何在 ruby​​ 上设置由 Shibboleth 传递的环境变量?”。
  • @rlandster 根据我的收集,您可以在 attribute-map.xml 中设置系统从 shibboleth 获得的属性。我想在我的 RoR 应用程序中安全地使用这些属性(最好不要作为 HttpHeader)。我该怎么做?

标签: ruby-on-rails ruby apache passenger shibboleth


【解决方案1】:

您可以根据管理员列表检查通过 SAML 传递的经过身份验证的用户名。

您无需显式设置环境变量,而是由 Shibboleth 软件(通常是 shibd 和 Apache 的 mod_shib)设置环境变量。 Shibboleth SP 软件中的attribute-map.xml 文件将 SAML 响应传递的属性映射到环境变量(或 HTTP 请求标头)。

这是一个示例片段:

# /etc/shibboleth/attribute-map.xml
<Attributes xmlns="urn:mace:shibboleth:2.0:attribute-map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Attribute name="urn:mace:dir:attribute-def:eduPersonPrincipalName" id="eppn">
    <AttributeDecoder xsi:type="ScopedAttributeDecoder"/>
  </Attribute>
</Attributes>

以上内容在 SAML 响应中使用名称为 urn:mace:dir:attribute-def:eduPersonPrincipalName 的属性并将其映射到环境变量 eppn。除非特别配置,否则 Apache 会将此环境变量传递给您的 Rails 应用程序。

有关详细信息,请参阅 Shibboleth 联盟的文档页面 NativeSPConfiguration

【讨论】:

  • 这是我的理解。谢谢@rlandster,这回答了我的大部分问题。我想知道如何/在哪里检查 SAML 用户名?最终,我想限制对我视图中元素的访问,这可以在页面中完成,也可以通过管理特定页面来完成(基本上与用户页面相同;有几个额外的按钮)。如何在我的应用程序中使用环境来实现这个 if-else
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多