在 Windows 8 上使用 Microsoft 帐户的 Azure ACS 2.0

Posted

技术标签:

【中文标题】在 Windows 8 上使用 Microsoft 帐户的 Azure ACS 2.0【英文标题】:Azure ACS 2.0 with Microsoft Account on Windows 8 【发布时间】:2012-09-11 18:10:36 【问题描述】:

我正在使用 SSL 保护我的 Windows 8 到 Windows Azure 托管的 WCF 服务连接。我有兴趣验证用户正在使用我的 Windows 8 应用程序,而不仅仅是一些使用 Fiddler 的“黑客”。

我显然不能在 c# 代码中存储用户名和密码,在这种情况下,我真的很想避免在用户每次使用应用程序时(或者永远不要)询问用户名和密码。

我查看了Azure ACS,但它看起来仅用于单点登录,并且用户每次都必须输入用户名和密码。

有没有办法:

在 ACS 中使用默认的 Microsoft 帐户(大多数用户在设置 Windows 8 时会输入该帐户)? 加密并存储用户的登录详细信息,以防止用户每次都必须输入登录详细信息?

谢谢!

【问题讨论】:

由于您的应用在 Windows 8 上,并且您希望使用 Microsoft 帐户,您是否考虑过直接使用 Live SDK? Michael Crump 有一篇关于将 Live SDK 与您的 WinRT 应用程序集成的文章silverlightshow.net/items/… 【参考方案1】:

关于您的要求“我有兴趣验证用户正在使用我的 Windows 8 应用程序,而不仅仅是一些使用 Fiddler 的‘黑客’。”,我不确定您会尝试保护您的应用程序的深度,就像其他人想要的那样尝试以不同的方式使用您的应用程序,它们会找到自己的方式,如果您认为使用 ACS 或 LiveSDK 会增加任何安全性,我不这么认为。

ACS 或 LiveSDK 服务是对特定用户进行身份验证然后允许他们使用您的应用程序的方法。一旦将有关特定用户的身份验证令牌提供给您的应用程序,并且您无法保存并再次验证该信息,那么在您的应用程序中使用基于 ACS/LiveSDK 的身份验证与不使用它没有区别。这些基于 oAuth 的服务只是对用户进行身份验证的一种方式,您仍然需要编写额外的代码层来提供用户特定的服务。

无论您使用 ACS/oAuth/或您自己的会员服务,用户都必须输入用户名和密码才能获得身份验证。根据登录时间和类型,您可以让用户在实时会话中保持活跃 x 时间,但是会话将过期,用户必须输入用户名和密码。将用户名和密码存储在本地以避免再次输入凭据不是一个好的应用程序设计。

现在关于您的第一个问题,您应该使用 LiveSDK(不是 Azure ACS)对 Live(Hotmail、Live、Skydrive 和 Outlook 域)用户进行身份验证,因为在 Windows 8 中,大多数服务都使用这些 ID,因此使用其中一个将帮助您的应用程序成为同一生态系统的一部分。您可以使用this latest doc 在您的应用程序中使用 Live SDK。如果您将在 Windows 8 应用程序中使用 Live SDK,并且用户在 Windows 8 上为他们的其他应用程序使用相同的 Live ID 并在您的应用程序之前登录,则您的应用程序将已经有一个实时会话可以使用它,具体取决于 Live ID 和应用程序设置.

关于您的第二个问题“加密并存储用户的登录详细信息以防止用户每次都必须输入登录详细信息?”我不确定你为什么需要它。首先,除了用户名之外,没有 oAuth 服务会为您提供用户登录凭据,您可以保存该凭据以在用户再次访问时验证用户,并且您可以使用该凭据来确保它是正确的用户。您必须需要将此信息存储到云中,然后一旦通过身份验证,就可以做任何您想做的事情。

【讨论】:

基本上,我无法验证是否有人在使用我的应用程序,因为最终任何想要它的人都可以访问我的 XAP 包。 Windows Phone 和 Windows 8 应用程序包现已加密,但看起来人们已经破解了它。 forum.mobilism.org/viewtopic.php?f=1073&t=386304。有没有办法验证有人正在使用我未修改的应用程序? 你确实带来了一个很好的观点,不幸的是这不是讨论这种情况的论坛。正如我所提到的,事实是如果有人(1% 或更少)想以其他方式使用您的应用程序,他们会找到一种方法,因此您需要决定在这方面需要花费多少能源/资源。 谢谢!我会看看,看看我能做什么。你知道我可以在哪里讨论这个吗?【参考方案2】:

看看这个适用于 Windows 8 现代风格应用程序的凭据存储示例 - http://code.msdn.microsoft.com/windowsapps/PasswordVault-f01be74a。它不是 Azure ACS - 但它应该可以帮助您解决问题。 PasswordVault 是一个新的 API (Windows.Security.Credentials.PasswordVault),它建立在我们看到的 .NET 3 中引入的识别功能之上。它允许您将远程应用程序凭据安全地存储在操作系统中的受保护存储中,并在其中动态访问它们你的申请。用户仍然可以完全控制商店,如果愿意,可以使用控制面板删除数据。 目前,这是大多数现代应用程序为远程服务调用(如 Twitter)保存 OAuth 令牌等数据的方式。

这仅适用于第三方身份。如果您想改用 Microsoft 帐户,请按照上述指南查看 LiveSDK。

【讨论】:

以上是关于在 Windows 8 上使用 Microsoft 帐户的 Azure ACS 2.0的主要内容,如果未能解决你的问题,请参考以下文章

节点包不在Windows 8.1上构建 - 缺少Microsoft.Cpp.Default.props

Microsoft Windows 8.1 使用记录

在 Windows 8.1 上安装 pymsql

Windows Phone 8 和 Microsoft Expression Blend 4

Microsoft Exchange不支持Windows 8问题

windows 8 移动自定义身份验证