我应该如何处理 Window Phone / WCF / ASP.NET MVC 应用程序的用户身份?

Posted

技术标签:

【中文标题】我应该如何处理 Window Phone / WCF / ASP.NET MVC 应用程序的用户身份?【英文标题】:How should I handle user identity for a Window Phone / WCF / ASP.NET MVC application? 【发布时间】:2011-07-24 20:27:03 【问题描述】:

我正在开发一个应用程序,它允许从 Windows Phone 应用程序和 MVC 3 Web 界面输入和显示数据。电话客户端的数据访问是通过 MVC 3 应用程序中托管的经过身份验证的 WCF 服务进行的。用户将跟踪他们独有的信息,因此该服务只会显示我输入的数据。

在这种情况下处理身份的最简单方法是什么?从phone application has access to a Windows Live Anonymous ID property 开始,我就考虑过使用 Windows Live ID。但是,据我所知,没有办法允许基于 Web 的 Windows Live 登录,它会为我提供相同的 Windows Live 匿名 ID - Windows Live Messenger Connect login gives me a site-specific unique ID,这与手机客户端的匿名 ID 不同。

或者,我可以在客户端和手机上使用Facebook SDK 进行 Facebook 身份验证。我担心的是确保服务呼叫的安全。我在想,当设备第一次使用 Facebook ID 连接到服务时,服务器会为其颁发一个密钥,并且 Facebook ID 和服务器颁发的密钥都是服务访问所必需的。

对以上内容有什么想法?有没有我想念的更简单的解决方案?

【问题讨论】:

【参考方案1】:

亲爱的乔恩, 我没有 WP 开发经验,但我对 WCF Auth 做了一些搜索。最近几天发现apiKey auth对我来说几乎是最好的方法。 Rob Jacobs 在本文中解释了它的工作原理;

http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx

【讨论】:

@Jon 没问题先生。即使这不是一件大事,您总是会帮助我并乐于提供帮助。【参考方案2】:

API 密钥的替代方法是使用基于声明的身份和安全令牌。您可以将 Windows Azure 访问控制服务用作受信任的安全令牌颁发者,其附加值是预先配置为使用 LiveID、Facebook、Google、任何 OpenID 和任何 WS-Federation 身份提供者。网站和 Web 服务都信任 ACS。

ACS 将为您提供网站的 SAML 令牌(允许您的用户使用 LiveID、Google 或 FB 登录)。

ACS 还可以发布简单 Web 令牌 (SWT),这对于 REST 服务来说尤其简洁(假设手机客户端使用它)。

您不能在应用中使用与手机关联的 LiveID,但您仍然可以使用 LiveID(或任何其他身份提供商)。这是an example 的操作方法。它使用在手机应用程序中嵌入网络浏览器并用于所有安全令牌协商的常用方法。

使用 ACS 为您提供了很大的灵活性,而且没有所有的复杂性。使网站“声明感知”并信任 ACS 非常简单。更多示例:http://claimsid.codeplex.com

【讨论】:

【参考方案3】:

如果您需要将电话链接到 MVC 站点上的用户,您可以为 Roku 和其他设备执行 Netflix 和 Amazon 的操作,并进行某种激活过程。为了更容易,您可以使用由 MVC 站点生成的 QR 码或其他类型的条形码,让用户对其拍照,然后使用 Silverlight ZXing Barcode Scanning Library 处理图像。可能有点复杂,但它适用于所有机顶盒。

【讨论】:

以上是关于我应该如何处理 Window Phone / WCF / ASP.NET MVC 应用程序的用户身份?的主要内容,如果未能解决你的问题,请参考以下文章

被`webView.uiDelegate`打开后如何处理`window.close`?

在使用 Tumbling Window 的 azure 流分析中,如何处理前一小时的数据

如何处理 aws-appsync 中的关系?

js中如何处理多个页面的window.onload事件的同名冲突?

我应该如何处理缓存设置?

我应该如何处理“'someFunction' 不是从 'namespace:somePackage' 导出的对象”错误? [关闭]