WCF成员资格提供商与定制服务授权管理器w。自定义用户名验证程序
我是WCF的新手,正在尝试设置服务,并收到了两个不同的建议:WCF成员资格提供商与定制服务授权管理器w。自定义用户名验证程序,wcf,wcf-security,Wcf,Wcf Security,我是WCF的新手,正在尝试设置服务,并收到了两个不同的建议: 将内置身份验证服务与成员资格提供程序()一起使用 使用带有自定义用户名验证程序和“TransportWithMessageCredential”()的自定义服务授权管理器 我可以看到的区别在于方法二,每次调用服务时都会验证用户凭据,我不必在服务器上保持会话状态,我喜欢这样 我是否误解了这两个概念,这两个概念解决了不同的问题 有人能帮我理解这两个以及何时使用它们吗?ASP.NET内置的成员资格和角色提供程序只为您提供SQL Server
有人能帮我理解这两个以及何时使用它们吗?ASP.NET内置的成员资格和角色提供程序只为您提供SQL Server数据库(以及管理GUI)中的现成表和存储过程,以处理创建用户、定义角色、为用户分配角色等操作 他们为WCF提供了一个预定义的成员身份验证提供商-因此,基本上,您只需免费获得或多或少的一切,而不必担心创建用户、管理其密码等所有细节 对于初学者,我肯定会使用这个选项-更容易和更快地启动和运行 自定义身份验证验证器更像是一个高级主题,如果您有ASP.NET成员资格提供程序以外的特定和专门的需求,您可能需要研究它。它给了你更多的权力——你基本上可以从WCF获得用户名和密码,这取决于你是否要验证那个调用者——但这也需要做更多的工作,真的 进行身份验证的方式没有区别-WCF的最佳实践是使用每次呼叫服务,在这种情况下,您将始终在每次呼叫的基础上对呼叫者进行身份验证-无论您在后台使用何种身份验证机制(Active Directory、ASP.NET成员资格、自定义)
因此,我绝对建议您使用ASP.NET内置的成员资格和角色提供程序,只要这些功能对您来说已经足够了,而且我非常确信它们在很长一段时间内都会很好 您提供的两个选项不是互斥的,用户名/密码验证是一种消息验证机制。其目的是为发送消息的用户提供凭据 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"/>
因此,在消息层使用用户名/密码作为凭证与使用用户名/密码作为身份验证机制是不同的(并且是分开的)。希望这有助于您理解概念谢谢您的精彩总结!我已经实施了第二个选项,所以我现在会坚持,但很高兴知道未来。你能回答吗?