客户端 WPF 应用程序如何使用 Azure 上的 WCF 服务进行身份验证?

Posted

技术标签:

【中文标题】客户端 WPF 应用程序如何使用 Azure 上的 WCF 服务进行身份验证?【英文标题】:How does a client WPF application authenticate with a WCF service on Azure? 【发布时间】:2011-11-21 02:45:03 【问题描述】:

我目前正在考虑创建一个应用程序以部署到天蓝色云。考虑使用 Azure 而不是 Amazon 的主要原因是访问控制服务。我想为我的应用程序(尤其是 Facebook)接受尽可能多的不同凭据类型。

一些用户将使用基于 html 的应用程序,其他用户将使用 WPF 客户端应用程序。问题是,我如何使用他们想要的任何提供者对客户端进行身份验证,然后与 WCF 服务进行通信。我猜我需要在我的应用程序中使用网络浏览器组件,或者弹出一个外部浏览器(理想情况下支持偏执用户的两个选项),但我不清楚如何将该连接用于 WCF 服务.

【问题讨论】:

+1 有趣的问题。我不确定是否有一个简单的答案,但我会看这个。 刚刚发现 msdn.microsoft.com/en-us/… 可能很有用,我现在正在阅读。 不幸的是,out of browser 示例使用用户名和密码,因此不支持 facebook 查看 Vittorio Bertocci 的博客(也称为队长身份)。如果你能做到,它就会在那里。有一篇文章向您展示了如何在地铁中执行此操作。 blogs.msdn.com/b/vbertocci 【参考方案1】:

考虑将用户对应用程序的身份验证与应用程序和 WCF 服务之间的身份验证分开。

要保护对 WCF 服务的访问,您可以使用 ACS 使用简单 Web 令牌 (SWT) 实现身份验证。您可以通过您选择的搜索引擎找到几个这样的示例。

抱歉,我目前无法为您提供更具体的示例。我在移动设备上使用 i 设备,因此对工具的访问权限有限。

【讨论】:

WCF 服务需要知道用户是谁,并且能够保证其真实性,我并不完全清楚您的解决方案是如何提供的。 SWT 是否对应用程序或用户进行身份验证?【参考方案2】:

我认为您的意图是如何为此 WCF 服务验证/授权用户,对吗?在这种情况下,您可以查看“Windows 7 手机应用程序”示例:http://msdn.microsoft.com/en-us/library/gg983271.aspx。在这里,您将看到此示例使用“javascriptnotify”协议。

对于 WPF WebBrowser 控件,有很多文章描述了如何从 DOM 中的 javascript 获取通知。

通过这种方式,您可以获得 WPF 应用程序的令牌,然后您将需要使用相同的令牌对 WCF 服务进行身份验证。

对于 Web 应用程序,您可以从 WSFam 模块获取令牌。一种方法可能是在 WSFam 上注册 SecurityTokenReceived 事件。

对于这两种情况,您都可以得到一个 SAML 令牌。

然后您可以为 WCF 创建您自己的自定义 SAML TokenProvider,并使用您从 ACS 获得的 SAML 令牌与您的服务器通信。

【讨论】:

【参考方案3】:

您要查找的内容称为“活动联盟”。 见this question

通常,您的网络客户端将使用被动形式,在这种形式中,它们被重定向到安全令牌服务拥有的登录页面。您无法重定向 wpf 或 winforms 应用程序,因此您的应用程序需要完成浏览器在幕后为您执行的动作,包括协商和缓存您从 STS 收到的安全令牌,然后在每个请求中显示它。

【讨论】:

以上是关于客户端 WPF 应用程序如何使用 Azure 上的 WCF 服务进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何向使用我的 Azure 云服务的客户收费?

如何测试托管在Azure Appservice上的SignalR应用(负载+功能结合)?

Azure AD 在 Web API 中使用来自客户端应用程序的令牌

Azure 事件中心 - 特定分区上的 EventProcessorClient

Azure 应用服务上的受信任根证书

无论安装的 Lync 客户端版本如何,都从 C# WPF 桌面应用程序启动 Lync 对话