【问题标题】:WCF membership provider versus custom service authorization manager w. custom username validatorWCF 成员资格提供程序与自定义服务授权管理器 w。自定义用户名验证器
【发布时间】:2011-01-06 06:53:11
【问题描述】:

我对 WCF 很陌生,我正在尝试设置服务并收到了两个不同的建议:

  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)

我可以看到的区别在于方法二,每次调用服务时都会验证用户凭据,并且我不必在服务器上保留会话状态,我喜欢这样。

我是否误解了这些概念并且两者解决了不同的问题?

有人可以帮我理解这两个以及何时使用它们吗?

【问题讨论】:

    标签: wcf wcf-security


    【解决方案1】:

    您提供的 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"/>
    

    因此,在消息层使用用户名/密码作为凭据与使用用户名/密码作为身份验证机制是不​​同的(并且是分开的)。希望这可以帮助您理解这些概念

    【讨论】:

    【解决方案2】:

    ASP.NET 内置成员资格和角色提供程序只是在 SQL Server 数据库(和管理 GUI)中为您提供现成的表和存储过程,以处理创建用户、定义角色、将用户分配给角色等.

    它们为 WCF 提供了预定义的成员身份验证提供程序 - 因此,基本上,您几乎可以免费获得所有内容,而不必担心创建用户、管理密码和以此类推。

    对于初学者,我肯定会使用此选项 - 启动和运行起来更容易、更快。

    自定义身份验证验证器更像是一个高级主题,如果您有超出 ASP.NET 成员资格提供程序的特定和专门需求,您可能需要研究该主题。它给了你更多的权力——你基本上从 WCF 获得用户名和密码,是否对调用者进行身份验证取决于你——但实际上,它也需要做更多的工作。

    进行身份验证的方式没有区别 - WCF 的最佳做法是使用每次调用服务,在这种情况下,您将始终在每次调用时对调用者进行身份验证基础 - 无论您在后台使用哪种身份验证机制(Active Directory、ASP.NET 成员资格、自定义)。

    所以我绝对推荐使用 ASP.NET 内置的成员资格和角色提供程序,只要它们对你来说足够了 - 我很确定它们会在很长一段时间内都很好!

    【讨论】:

    • 感谢您的精彩总结!我已经实现了第二个选项,所以我现在会坚持下去,但很高兴知道未来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多