2009-12-07 143 views
5

我正在創建一個包含ASP.NET頁面和Flash小程序的網站。我想將業務邏輯封裝在一個WCF服務中,該服務將通過兩個端點公開:一個通過HTTP(S)訪問,供Flash客戶端使用,另一個訪問數據中心以供應用程序服務器使用。如果這看起來不是一個好方法,那麼請阻止我在這裏;否則,我將繼續...WCF中基於令牌的身份驗證

問題是如何驗證來自Flash客戶端的請求。由於我不想將用戶的密碼存儲在瀏覽器cookie中,因此不希望在每次請求時都發送密碼,也不希望在初始登錄後使用HTTPS,我打算使用令牌 - 基於認證系統。我也不希望用戶在登錄到網站後不得不登錄Flash客戶端,因此我打算在使用Javascript將啓動時的令牌傳遞給Flash客戶端。

我知道WCF支持使用.NET Framework的內置安全框架(System.Security)來實施訪問控制,我想利用這一點。

那麼問題是:如何在通過Flash調用令牌到WCF服務時如何傳遞令牌,以及如何在服務器上處理令牌?

  • WCF有一個「頒發的令牌」身份驗證模式,但現在看來這是爲了在一個完全成熟的聯合方案中要使用帶有安全令牌服務和SAML令牌 - 多一點複雜,我真的想。我可以用我自己的「簡單的隨機串」標記來使用這種模式嗎?如果是這樣,怎麼樣?請記住,這需要與Flash兼容。
  • 我可能會傳遞標頭中的標記(SOAP標頭或HTTP標頭)。在這種情況下,一旦我確定了哪個用戶正在提出請求,我如何通知框架以便System.Security檢查能夠工作?
  • 我應該考慮完全不同的方法嗎?任何避免在每個請求中發送密碼的東西都可以讓我使用System.Security,並且可以使用Flash。
+0

亞倫,你有沒有想過一個簡單的方法來做到這一點?我正在嘗試在WCF中執行一些簡單的基於令牌的身份驗證,並且它看起來比它應該更困難。 – technophile 2010-02-11 21:56:55

+0

我結束了基本上我自己。我有一個發出令牌的WCF端點 - 它需要一個用戶名和密碼,驗證它們,並用令牌響應,在我的情況下,令牌只是一個隨機字符串。實際的業務邏輯方法位於不同的端點上,該端點具有自定義消息檢查器,用於讀取包含令牌的自定義頭。在客戶端上,另一個消息檢查器將頭添加到傳出消息。這比我希望做的更多的工作,但它似乎運作良好。 – Aaron 2010-02-16 22:54:15

回答

2

,因爲它似乎原來的問題已經回答了我會記住這簡短,但一個方法確實是通過HTTP標頭中的身份驗證令牌,並覆蓋CheckAccess(OperationContext operationContext, ref Message message)在自定義ServiceAuthorizationManager

您以前將配置該服務以使用實施IAuthorizationPolicy的自定義策略。

剩下的就是實現簡單的IIdentityIPrincipal類來存儲您的授權狀態。

關於這個問題存在許多好文章:

http://msdn.microsoft.com/en-us/library/system.identitymodel.policy.iauthorizationpolicy.aspx

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

我想這可能仍然覺得自己像一個「滾你自己」的解決方案,但它至少讓人放心當你按照既定的模式。它的優點是通過服務方法對授權代碼進行黑框。