如何处理 SilverLight 4 和 WPF 应用程序的 WCF 身份验证

Posted

技术标签:

【中文标题】如何处理 SilverLight 4 和 WPF 应用程序的 WCF 身份验证【英文标题】:How-To Deal with WCF Authentication for Both SilverLight 4 and WPF Application 【发布时间】:2011-06-21 11:02:53 【问题描述】:

我正在寻求建议,以便为针对 SilverLight 和 WPF 客户端界面的应用程序处理 WCF 身份验证。

编辑:实际上,我需要的身份验证模式是用户名/密码组合。

此外,将来应用程序应该能够在完全独立模式下工作(客户端 (WPF) 和服务器在同一应用程序中的同一台计算机上)。那么在这种情况下我应该不使用 WCF 吗?

编辑:另一个补充,未来应用程序应该能够在本地网络客户端-服务器模式(但没有 IIS)下工作,就像游戏一样。那么在这种情况下我不应该使用 WCF 吗?还是有其他选择?

【问题讨论】:

我需要类似的东西,在查看了不同的内置选项后,我决定使用 MessageInspector msdn.microsoft.com/en-us/library/aa717047.aspx。通过使用它,我可以将数据注入客户端和服务实现逻辑之外的标头中。 【参考方案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 属性中。

【讨论】:

【参考方案2】:

查看此解决方案,使用 AuthenticationService。我喜欢它并决定将它用于三平台应用程序(web/SL/WPF)

http://msdn.microsoft.com/en-us/library/system.web.applicationservices.authenticationservice.aspx

点击链接获取示例实现。

通过这种方式,您可以依赖经典的自定义 ASP .NET MembershipProvider 实现(即使在独立客户端中)。

【讨论】:

我已经查看了 AuthenticationService,但它是否可用于我的应用程序的“未来”版本,如问题中所述? 您可以在经典的断开连接的桌面应用程序中使用 ASP .NET MembershipProvider,没问题。 如何在没有 HttpContext 的情况下使用 ASP.NET MembershipProvider ?就像一个独立的 WPF 应用程序。【参考方案3】:

IIS 不是托管 WCF 服务的要求。看看这个link 了解各种托管选项。 WCF 还允许通过各种协议进行通信。查看此link,了解基于操作平台和通信协议的托管选项摘要。

【讨论】:

【参考方案4】:

可用于 WCF 服务身份验证的技术很少(X509 证书、令牌、用户名/密码和 Windows 身份验证。Selecting 正确的凭据类型很重要。

假设(因为您使用的是 silverlight 和 WPF)设置在 Windows 环境中,您可以使用 Windows 身份验证。 To 启用 Windows 身份验证按照突出显示的步骤并在 IIS 上托管您的服务。

希望这会有所帮助,祝你好运!

【讨论】:

【参考方案5】:

使用 WCF 的优势在于,如果您想在网络内或向外界公开服务,您只需更改/添加一些额外的配置,而无需对代码进行任何更改。

因此,在您的情况下,在一台机器上或在网络中同时拥有客户端和服务器是绝对可以的,简单的方法是公开 2 个端点来处理您对同一服务的要求。

您也可以使用一个端点,但是使用具有不同绑定机制的不同端点可以减少身份验证期间的开销。例如:当您在同一台机器上时,您可以使用 net:pipe 或 net:tcp 绑定 当您在域内时,您可以使用 net:tcp 或 httpbinding。

使用不同的绑定时性能会有所不同。

【讨论】:

以上是关于如何处理 SilverLight 4 和 WPF 应用程序的 WCF 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

WPF 如何处理对空对象属性的绑定?

如何处理组小计,例如WPF DataGrid 中的目标行?

如何处理在WPF TreeView中显示数据的大延迟

如何处理与 .NET WPF 应用程序具有 OCX 依赖项的 VB6 ActiveX dll 的对话

C# 如何处理 OpenFileDialog 文件

如何处理纯粹与视图相关的命令?