2012-12-16 30 views
0

我需要創建一個wcf服務,該服務將被通過互聯網下載的silverlight應用程序使用。基本上用戶不是任何Windows域的一部分,但是在數據庫中維護證書和角色。需要幫助在互聯網環境中實現WCF身份驗證和授權

  1. wcf服務應該啓用internet,但方法不能匿名訪問。
  2. 授權也應予以支持\
  3. 用戶和角色表不按ASP.NET會員架構
  4. 開發商不應該被限制爲必須安裝IIS和證書配置
  5. 授權的用戶能夠訪問只有他的相關信息。他應該能夠刪除或更新他的相關公司,但不能刪除其他公司。

要實現1 & 2,我已經按照下面的鏈接。

WCF security by Robbin Cremers

要覆蓋的MembershipProvider和RoleProvider類和覆蓋方法的ValidateUser的isUserInRole和第3點,我已經提供了自定義實現分別從我自己的模式用戶和角色表來獲取。

到目前爲止,這麼好的認證和授權工作正常。

現在的問題是,開發人員無法安裝IIS並配置證書,因此需要在開發模式下禁用此功能。因此實現了自定義的CodeAccessSecurityAttribute類,它將檢查開發模式或生產並使用自定義IPermission或PrincipalPermission。

[問題1]我的問題是我沒有任何地方的人推薦這種方法,所以小心害怕這是否是正確的方法或任何更好的方法來處理這種情況。

[問題2]最後與第5點相關,我需要發送某種令牌嗎?什麼是最好的方法呢?

[問題3]對Robbin Cremers方法的性能影響,因爲對於每個服務調用,將在「ValidateUser」和「IsUserInRole」中進行兩次額外的數據庫調用以進行身份​​驗證和授權。有沒有更好的辦法?

對不起,一個大問題。

回答

0

據我所知,從您的場景描述中可以看出,一旦創建並連接了自定義的Membership/Role提供程序,就不需要Message Security。相反,http://msdn.microsoft.com/en-us/library/dd560702(v=vs.95).aspx中描述的標準方法可以正常工作(如果您希望用戶通過Silverlight應用程序而不是通過常規網頁登錄,則可以使用http://msdn.microsoft.com/en-us/library/dd560704(v=vs.95).aspx)。然後瀏覽器自動處理髮送任何必需的令牌(通過cookie),我猜測ASP.NET對緩存身份驗證/授權結果非常明智,因此不應在每次調用時都產生開銷。