我正在寻找建议,以便针对同时针对SilverLight和WPF客户端界面的应用程序处理WCF身份验证。
编辑:实际上,我需要的身份验证模式是用户名/密码组合。
此外,将来应用程序应该能够以完全独立模式(同一应用程序内的同一台计算机上的客户端(WPF)和服务器)工作。那么在这种情况下我不应该使用WCF吗?
编辑:另外一个补充,将来应用程序应该能够在本地网络客户端 - 服务器模式(但没有IIS)中工作,就像游戏一样。那么在这种情况下我不应该使用WCF吗?还是其他任何选择?答案 0 :(得分:1)
您可以通过继承UserNamePasswordValidator并在行为配置中设置customUserNamePasswordValidatorType来实现自己的验证器,如下所示:
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyNamespace.MyValidator, MyNamespace" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
在客户端,您可以将用户名/密码组合设置为服务的ClientCredentials.UserName.UserName / Password属性。
答案 1 :(得分:0)
使用AuthenticationService查看此解决方案。我喜欢它并决定将它用于三平台应用程序(web / SL / WPF)
http://msdn.microsoft.com/en-us/library/system.web.applicationservices.authenticationservice.aspx
按照示例实施的链接进行操作。
通过这种方式,您可以依赖经典的自定义ASP .NET MembershipProvider实现(即使在独立客户端中)。
答案 2 :(得分:0)
答案 3 :(得分:0)
可用于验证WCF服务的技术很少(X509证书,令牌,用户名/密码和Windows身份验证。Selecting正确的凭据类型很重要。
假设(因为您使用的是Silverlight和WPF)设置在Windows环境中,您可以使用Windows身份验证。 To启用Windows身份验证,按照突出显示的步骤操作,并在IIS上托管您的服务。
希望这有帮助并祝你好运!
答案 4 :(得分:0)
使用WCF的优点是,如果您想在网络中或外部公开服务,您只需更改/添加一些其他配置,而无需对代码进行任何更改。
因此,在您的情况下,在一台计算机上或在网络中同时拥有客户端和服务器是绝对正确的,并且简单的方法是暴露2个端点,以处理您对同一服务的要求。
您也可以使用一个端点,但使用具有不同绑定机制的不同端点可以减少身份验证期间的开销。例如:当你在同一台机器上时,你可以使用net:pipe或net:tcp绑定 当您在域内时,可以使用net:tcp或httpbinding。
使用不同的绑定时,性能会有所不同。