2010-01-18 91 views
3

我很新的WCF,我想設置的服務,並獲得兩種不同的意見:WCF會員供應商與自定義服務授權管理器w。自定義的用戶名驗證

  1. 使用內置的身份驗證服務,會員供應商(http://msdn.microsoft.com/en-us/library/bb398990(VS.100).aspx)(Custom UserNamePasswordValidator with Silverlight 3.0)。
  2. 使用自定義服務授權管理器使用自定義的用戶名驗證和「TransportWithMessageCredential」(http://msdn.microsoft.com/en-us/library/ms729794(VS.100).aspx)(Architechture of service application in WCF

我能看到的是方法二,則用戶的憑據是在每次調用驗證的區別服務,我不必在服務器上保持會話狀態,我喜歡它。

我是否誤解了這些概念,並解決了兩個不同的問題?

有人可以幫我理解這兩個,什麼時候使用每個?

回答

6

ASP.NET內置成員資格和角色提供者只是在SQL Server數據庫(和管理GUI)中爲您提供現成的表和存儲過程來處理創建用戶,定義角色,將用戶分配給角色等向前。

它們附帶一個預定義的WCF會員身份驗證提供程序 - 所以基本上,您只需要免費獲得更多或更少的所有內容,而不必擔心創建用戶,管理其密碼的所有細節等等。

對於初學者,我肯定會使用這個選項 - 起來和運行起來更容易和更快。

定製認證驗證程序更像是一個高級主題,如果您具有超出ASP.NET成員資格提供程序的特定和專門需求,則可能需要查看該主題。它給了你更多的權力 - 你基本上可以從WCF獲得用戶名和密碼,這取決於你是否認證這個調用者 - 但它確實也是一個相當多的工作。

有在認證中取得的方式沒有什麼區別 - WCF的最佳實踐是使用每個呼叫服務,在這種情況下,你會總是在每個呼叫的基礎上驗證您的來電者 - 不管在後臺使用什麼樣的身份驗證機制(Active Directory,ASP.NET Membership,custom)。

所以我肯定會推薦使用ASP.NET內置的成員資格和角色提供者,只要這些對你來說足夠了 - 而且我很確定他們很長一段時間會很好!

+0

感謝您的精彩總結!我已經實施了第二種方案,因此我現在堅持這一點,但對未來很瞭解。 – 2010-01-18 19:54:43

3

您提供的2個選項不是互斥的,用戶名/密碼驗證是一個消息驗證機制。其目的是爲發送消息的用戶提供憑據。

TransportWithMessageCredential是一種傳輸級別的加密方式,例如您使用SSL對傳輸級別進行加密,並將消息中的用戶憑證嵌入其中。

成員&角色提供者是用於驗證用戶傳遞的憑據的方式,它看起來像這樣。

<serviceBehaviors> 
     <behavior name="myCustomBehavior"> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" 
       membershipProviderName="MembershipProvider" /> 
      </serviceCredentials> 
     </behavior> 
    </servicebehaviors> 

<system.web> 
    <membership defaultProvider="MembershipProvider" userIsOnlineTimeWindow="15"> 
    <providers> 
    <clear /> 
    <add name="MembershipProvider" type="MyApp.AP.SimpleSqlMembershipProvider, MyApp.AP" connectionStringName="APServer" applicationName="/MyApp" /> 
    </providers> 
    </membership> 
</system.web> 

現在你可能會使用自定義的用戶名密碼驗證,看起來像這樣

<userNameAuthentication 
    userNamePasswordValidationMode="Custom" 
    customUserNamePasswordValidatorType= 
    "MyApp.SL.CustomUserNameValidator, MyApp.SL"/> 

因此,使用用戶名/密碼在消息層的認證是使用不同的(和獨立)用戶名/密碼作爲認證機制。希望這有助於你理解概念

+0

你能否回答http://stackoverflow.com/questions/9584198/authentication-service-using-wcf? – Lijo 2012-03-06 13:09:47