2016-11-27 75 views
1

我正在尝试为Web门户实现身份验证我正在开发Ruby on Rails(即,我想保护某些页面以进行管理访问)。它受Shibboleth保护,我有一个用户数据库(有关我从Shibboleth得到的信息)。服务器正在运行的Phusion乘客上apache2.4使用Shibboleth属性作为Ruby环境变量(Phusion Passenger)

我有两个问题:

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

    • 如何在Shibboleth传递的红宝石上设置环境变量?我将如何在HTML页面中使用它们来实现上述的if-else?

让我知道,如果需要更多的信息。

+0

请澄清你的意思是“如何在Shibboleth传递的红宝石上设置环境变量?”。 – rlandster

+0

@rlandster从我收集的内容中,您可以在attribute-map.xml中设置系统从shibboleth获取的属性。我想在我的RoR应用程序中安全地使用这些属性(最好不要使用HttpHeader)。我该怎么做? – newtojs

回答

0

您的想法是检查通过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> 

上述取属性与名称urn:mace:dir:attribute-def:eduPersonPrincipalName SAML响应,并将其映射到环境变量eppn。除非特别配置,Apache会将这个环境变量传递给你的Rails应用程序。

欲了解更多信息,请参阅Shibboleth联盟的文档页面NativeSPConfiguration

+0

这是我的理解。感谢@ rlandster,这回答了我的大部分问题。我想知道如何/在哪里检查SAML用户名?最终,我想限制访问我的视图上的元素,这可以在页面中完成,或者通过管理特定的页面(基本上与用户页面相同;带有一些额外的按钮)。我如何在我的应用程序中使用环境来实现这个if-else – newtojs