2013-08-06 54 views
1

我正在聯合具有各種區域和極其細化的權限的應用程序。每個不同的區域都有一個聯合的WCF端點可以與服務器進行通信。由於細粒度的權限,包含所有權限的單個令牌可以大到1MB,也許更多。通過頒發令牌對STS進行身份驗證

要求規定在初始登錄過程之後,用戶的用戶名和密碼憑證不能保存在我們的代碼庫中。權限不能組合以創建更小的集合。我們正在爲我們的STS實施使用Thinktecture.IdentityServer。

我建議的解決方案是在STS中將每個端點分成它自己的領域,並且STS將返回一個具有爲該領域指定的權限聲明的標記。爲了達到這個目的,我希望有一個Auth領域,它通過用戶名/密碼進行身份驗證,並返回一個包含用戶,租戶和子組ID的令牌,然後可以將其用作向其他領域進行身份驗證的憑據。

設置STS發佈特定於領域的令牌已經實施。剩下的唯一要求是用戶名/密碼不在我們的代碼庫內。

是否可以通過提供先前從特定領域發佈的令牌來配置STS以允許進行身份驗證?有沒有更好的解決辦法,我沒有來過?

回答

1

是的,您可以使用由STS B發出的令牌對STS A進行身份驗證。必須將STS A配置爲信任STS B作爲已知的身份提供者。

隨着思想STS我想你可以通過配置一個新的WSStar身份提供商來做到這一點。如果一個領域STS增加另一個領域STS作爲身份提供者,它應該開始接受從該領域+證書頒發的令牌。

對於WCF,一個合理的無痛的方式設立頒發的令牌渠道與WIF CreateChannelWithIssuedToken擴展方法:

http://msdn.microsoft.com/en-us/library/ee517268.aspx

1MB是個很大的令牌確實如此。可能還有其他很好的理由在不同的領域中分裂爲多個STS,但是您可以通過動態地通過依賴方的策略或權限存儲來動態獲取權限來解決問題,在該方面令牌被消耗而不是預先計算所有來自STS方面的細化權限。但我不知道你的具體應用這麼說,所以請隨時告訴我走開:)

+0

我假設這將工作,如果STS A === STS B,並會嘗試這一點。如果它可行,我會將其標記爲接受的答案。關於在RP上使用權限存儲,由於數據存儲需求,目前這是不實際的。 – psaxton

1

你真正想要的是重新過期的過期令牌。我們不支持這一點。也沒有計劃這樣做。

您可以將到期時間設置爲適合您的值 - 然後再強制重新登錄。

1 MB令牌不是一個好主意 - 您需要往返或創建會話關聯。令牌旨在描述用戶身份,而不是將每個可能的值轉儲到它們中。

爲什麼RP不通過服務調用從IdP加載authZ規則?

+0

目前,該計劃將從auth領域發佈〜12小時到期令牌,然後使用auth領域令牌作爲對其他領域的認證。據瞭解,IdP不會允許續訂auth領域令牌。 關於「RP通過服務調用從IdP加載authZ規則:」這是我不熟悉的東西。你能提供一個指導或示例實施的鏈接嗎? – psaxton

+1

而不是通過令牌傳輸您的authZ規則。創建一個web服務,RP可以檢索它們。 – leastprivilege

+0

要深入瞭解多米尼克正在接受的內容,您發佈的令牌中的聲明應該是一系列關於主體的屬性:名稱,職位,職級,部門,他們的工作項目等。聲明不是權限,您的STS應該不代表正在使用令牌的RP進行授權決策。它應該是RP通過策略(規則集)運行委託人的一組索賠以作出授權決定。理論和實踐之間存在差異,但至少理論上這是理論。 –

相關問題