2010-01-18 49 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