2011-11-08 16 views
2

我正在以完全斷開連接的方式從Silverlight應用程序中消耗大量WCF服務。WCF中的每次調用驗證

我想確保我知道調用每項服務的用戶,並且我不知道是否有「標準方式」。

我想過一個Login方法來獲取一個Token,然後在每次調用中傳遞用戶名和它的令牌,以確保他/她已記錄並有權執行它。

在我自己的SQL Server中是否有任何「幾乎完成」的ASP.NET授權方式?或者我只能使用它的表格,但我必須「手動」進行操作?

在此先感謝!要做到這一點

+1

爲什麼你不能只使用ASP.NET身份驗證? – Zannjaminderson

+0

我不知道ASP.NET身份驗證會爲我做什麼。我的意思是,如果我將ASP.NET身份驗證添加到我的WCF服務中,當我調用每個不同的服務時,我會做什麼? – zapico

+0

你的意思是每次你打電話給你的服務? – Zannjaminderson

回答

5

這聽起來像使用ASP.NET成員可能是一個很好的適合你。有兩種方法可以用於此。首先是使用由aspnet_regiis生成的默認成員表。這個選項的優點是基本上爲你完成。在這種情況下,您只需運行aspnet_regiis工具,然後將所需的部分添加到您的WCF服務的Web.config,如here所述。然後,在調用服務時,您需要爲描述here所述的綁定設置憑據 - 特別是在使用服務時爲您的綁定設置ClientCredential的部分。

另一種選擇是按照here所述編寫自己的自定義會員供應商。這允許您在存儲和管理用戶方面做任何你想要的事情,而不是使用預先構建的ASP.NET機制。如果您與現有的用戶羣交配或想要更好地控制實施方式,這是一個很好的方法。

另外,請記住,ASP.NET成員資格不是保護WCF服務的唯一選項。花一些時間在你的選項,其中包括讀了起來:

  • Windows身份驗證和Windows授權經由basicHttpBinding的傳輸級安全
  • Windows身份驗證和Windows授權通過消息上的wsHttpBinding級安全
  • UsernamePasswordToken認證與ASP通過消息級安全.NET成員資格和ASP.NET角色的授權與自定義的驗證通過消息級安全性上的wsHttpBinding WsHttpBinding的
  • UsernamePasswordToken認證
  • 使用Windows憑據

這份名單授權使用自定義的授權策略

  • 模擬來自this blog post,這是一個好地方,你開始探索你的選擇。閱讀它們會讓你有機會了解每一個的優點,缺點和特點,以便你可以選擇最適合你的目的。您也可以從WCF安全here上的MSDN文章開始。

    總之,是的,有一種「幾乎完成」的方式來使用ASP.NET Membership,它不應該太難實現,但需要一些時間來探索其他選項,如果你決定採用這種方法是不合適的,那麼你將不得不在未來重新實施它。

  • +0

    非常感謝您的回答!我在測試中創建了第一個自定義成員資格提供程序,現在我正在嘗試使用ASP.NET成員資格。我唯一的疑問就是我怎麼知道誰在呼叫每個服務?我知道用戶發送每一個電話,但在我的自定義驗證器中執行「驗證」方法後......我不知道如何讓用戶執行服務(我想返回不同的數據,如果它是用戶或管理員,例如;-))。再次感謝!! – zapico

    +1

    你嘗試過使用'ServiceSecurityContext.Current.PrimaryIdentity'嗎? – Zannjaminderson

    +0

    哇!這太棒了!!!如果你使用ASP.NET Membership ...你能看到用戶角色嗎? – zapico

    1

    的一種方法是,如果你能扮演的,你需要在你的服務行爲添加以下

    <serviceAuthorization impersonateCallerForAllOperations="true" /> 
    

    更多的細節在這裏http://msdn.microsoft.com/en-us/library/ms731090.aspx

    ,所有用戶,如果你想知道用戶那麼你的服務方法裏面可以使用

    System.Threading.Thread.CurrentPrincipal.Identity.Name 
    

    找到誰在使用你的服務的用戶名

    編輯:

    您可以在這裏使用成員身份API細節

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

    http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx

    http://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/8a679fb2-e67e-44a9-b491-eb95d5144068

    +0

    在這種情況下,我怎麼知道誰在調用服務?我可以用用戶名和密碼錶嗎? – zapico

    +1

    如何使用會員的更新答案wcf –