簡體   English   中英

WCF用戶身份驗證和授權

[英]WCF User Authentication & Authorization

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

例如。 “Bob使用我們的loginmethod,我們將憑據發送到身份驗證服務,該服務讓我們知道這些憑據是否正確。” 如果Bob發送另一個請求,我們需要知道Bob是否已經過身份驗證。

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

這可以通過使用安全cookie來解決,還是你們中有人有更好的建議?

編輯! 我只能使用身份驗證服務器而無法訪問它

概觀

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

使用WS-Trust的聯合

第一個選項是基於SOAP的選項,它使用基於WS-Trust的活動聯合。 在此解決方案中:

  • 您的客戶端向身份驗證服務提供憑據
  • 如果憑據有效,則身份驗證服務會將簽名(和加密)令牌返回給客戶端。 它是加密的,因此令牌中包含的任何信息都保密 - 即使客戶端無法讀取它。 它使用屬於您的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服務的所有者不一定了解用戶或客戶端。 在某些方面它是一個不太完整的標准(例如,它沒有確切地定義身份驗證的發生方式),因此,切換到備用授權服務器就不那么容易了。

它的優點是:

  • 它更簡單,因此具有更廣泛的平台支持
  • 它越來越受歡迎,因此圖書館的支持一直在變得越來越好
  • 用戶永遠不會將他們的憑據輸入您的UI,只會進入auth服務器,因此更可能被信任(在互聯網方案中)
  • 它有一種內置的方式來控制授予客戶端的權限范圍,並撤銷這些權限,因此它在Internet場景中更受信任

官方.Net對此的支持是在Windows Azure AD身份驗證庫中

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

還有其他開源組件,例如DotNetOpenAuth

http://dotnetopenauth.net/

哪種解決方案最適合您,主要取決於我所說的身份驗證服務的性質。 無論您是在企業還是互聯網場景中。 如果是auth。 服務可以很容易地適應成為WS-Trust安全令牌服務(STS),那么這將是一條很好的途徑。 如果向auth添加一些Web UI。 服務是可行的,OAuth可能會更好。

或者,如果兩個選項都不可行,您可以從一種方法借用模式,並在不使用完整標准的情況下使用它。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM