2016-11-27 62 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