6

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

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

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

反正有没有:

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

谢谢!

4

2 回答 2

2

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

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

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

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

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

于 2012-09-21T00:59:53.040 回答
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。

于 2012-09-21T02:06:11.270 回答