2013-09-26 215 views
5

我需要找到一種方法來認證/授權WCF服務中的用戶。我正在使用存儲用戶憑據的外部認證服務。WCF用戶認證和授權

例如, 「Bob使用我們的登錄方法,我們將憑證發送給認證服務,服務讓我們知道這些憑證是否正確。」 如果Bob發送另一個請求,我們需要知道Bob是否已經過身份驗證。

現在正在客戶端上創建一個會話,但它需要移動到服務器端。我們不能依賴客戶的安全。

這可以通過使用安全cookie解決,或者你們有沒有更好的建議?

編輯!我只能用認證服務器不能訪問它

Overview

回答

9

你所描述的問題是一個衆所周知的一個有(至少)兩個標準化解決方案。

聯邦使用WS-信任

第一個選項是一個基於SOAP的一個使用基於WS-信任活性聯合。在這個解決方案:

  • 你的客戶端提供憑據的認證服務
  • 如果憑據有效,認證服務返回一個簽名(和加密)的令牌給客戶端。它被加密,令令牌中包含的任何信息都保密 - 甚至客戶端也無法讀取它。它使用屬於您的WCF服務的公鑰進行加密。它使用屬於認證服務的私鑰進行簽名。
  • 客戶端將已簽名/加密的令牌提交給您的WCF服務。該服務可以解密它,因爲它擁有用於解密的私鑰。它可以信任它,因爲它由身份驗證服務簽名。
  • 根據解密令牌的內容,服務可以建立客戶端身份並作出授權決定。

在這種模式下,通常的術語是:

  • 您的身份驗證服務安全令牌服務
  • WCF服務是依賴方
  • 您的客戶是客戶端

這聽起來很複雜,但它在使用Windows Identity Foundation的.Net和WCF中得到很好的支持。有很多樣本可用(可能都是)可以通過WCF配置而不是代碼完成。

這非常適合客戶端具有加密功能的場景(如.Net客戶端)以及存在良好框架(如WIF)的場景。對於低規格客戶如瀏覽器和某些電話,或者您無法控制客戶的情況,這種做法並不好。

它通常用於企業場景,包括企業到企業聯合。它在互聯網場景中使用較少。

它的優勢是

  • 它是標準化的,因此普遍受到框架的支持
  • 這意味着,WCF服務從來沒有來處理客戶端憑證(=更安全)
  • 它使得切換到不同的認證服務變得非常容易(因爲它是標準化的)。例如,內部部署AD和Windows Azure的AD都支持這一點,因爲做其他的獨立身份服務

概述可以在這裏找到:

http://msdn.microsoft.com/en-us/magazine/ee335707.aspx

而谷歌會告訴你其它更多演練和示例。使用OAuth 2

在該溶液

聯邦:

  • 客戶端顯示由所述認證服務提供一些UI(通常網頁)
  • 用戶輸入他們的憑據UI和身份驗證服務進行身份驗證並最終將令牌返回給客戶端。令牌的性質不是標準化的,也不是加密的。一般來說它至少會被簽名。
  • 客戶端提交令牌與每個請求的WCF服務
  • WCF服務認證令牌作爲以前的解決方案

在OAuth術語:

  • 你的身份驗證服務您的WCF服務是資源所有者
  • 您的客戶是客戶

再次,這聽起來很複雜,但它是.NET中還算不錯的支持。雖然目前可能不如WS-Trust方法。它受Windows Azure AD和客戶端的支持,使用Windows Azure身份驗證庫。其他服務可以使用這種方法 - 例如Facebook的。

這種運作良好,其中

  • 你的客戶端是低規格或不加密能力(例如瀏覽器或某些手機)
  • 你不控制客戶端(例如第三方應用程序正在訪問您的服務)

它是非常常用的互聯網應用程序,您作爲WCF服務的所有者不一定知道用戶或客戶端。在某些方面它不是一個完整的標準(例如,它沒有精確定義認證的發生過程),因此切換到其他授權服務器並不那麼容易。

它的優勢是:

  • 它更簡單,因此具有更廣泛的平臺支持
  • 它越來越受歡迎,因此庫的支持也越來越好所有的時間
  • 用戶從未將他們的憑證輸入到您的用戶界面中,只能進入auth服務器,所以它更可能被信任(在互聯網場景中)
  • 它具有內置的方式來控制授予客戶端的權限範圍,權限,所以ag艾因它是一個互聯網的情況更可信

這個官方.NET支持在Windows Azure Active Directory認證庫

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

還有其他開源組件太多,如DotNetOpenAuth

http://dotnetopenauth.net/

哪種解決方案是最適合你的,主要取決於你的AUTHENT的性質我會說服務服務。無論你是在企業還是互聯網場景。如果認證。服務可以很容易地適應WS-Trust安全令牌服務(STS),那麼這將是一條很好的路線。如果將一些Web UI添加到身份驗證。服務是可行的,OAuth可能會更好。或者,如果兩個選項都不可行,那麼您可以借用一種方法的模式,並使用該模式,而不必採用完整的標準。

祝你好運!

+0

謝謝你的這篇精心設計的文章。我忘了提及我沒有訪問驗證服務器,我只能使用它。所以我會嘗試製作我自己的令牌系統 – David

+0

LOL,好的。正如我所說,模式應該是有用的:o) –

+0

我很抱歉兄弟 – David