2017-05-09 70 views
1

我從SAML的基於服務提供者的SSO開始。由於用戶在繼續登錄之前必須輸入他的電子郵件,因此啓動了一個狀態變量並將其傳遞給SSO。它通過回調URL返回,因此再次檢查是否符合理智的目的。它防止CSRF攻擊。如何在身份提供商(IdP)啓動的SAML sso中維護狀態參數?

現在IdP啓動的SSO不允許我設置狀態變量。登錄從身份提供商開始,僅嚮應用程序提供身份驗證令牌。我不知道從哪個用戶開始進行身份驗證。如果我刪除狀態變量檢查,它也可能觸發CSRF攻擊。

我也使用omniauthrails這使得國家變量強制參數和SSO提供者是auth0

將狀態變量附加到IdP啓動的SSO解決方案的方式是什麼?

回答

2

IDP-init-SSO SAML流中RelayState參數事實上的標準值是您希望在SP上成功驗證SAML斷言後發送給用戶的URL。這對絕大部分SAML部署都有效。

但是,該機制實際上並不能防範CSRF攻擊,這就是爲什麼規範對IDP-init-SSO中的RelayState的值保持沉默,並且讓IDP與SP之間的機制達成一致以防止CSRF通過該參數的值。一種這樣的機制是在RelayState中使用有符號的值,但如前所述,沒有任何標準化,因此它將取決於IDP和SP之間的雙邊協議,它沒有規模化。

總結:發送您希望用戶轉到的URL的值作爲發送給SP的「主動」SAML響應中的RelayState值。如何讓IDP的SAML堆棧執行該操作就是實現特定的。對於Auth0,你可以在這裏閱讀:https://auth0.com/docs/protocols/saml/saml-configuration#idp-initiated-sso,在你的情況下它看起來像: https://{accountname}.auth0.com/samlp/YOUR_CLIENT_ID?RelayState=http://FINAL_DESTINATION_URL