1

我正在开发一个 Windows Phone 8 应用程序和一个 ASP.NET MVC 5 网站,每个网站都将访问 WebApi 服务(WebApi 2)。该网站和 WebApi 基于 VS2013 RTM 提供的模板,并已使用项目模板中可用的“个人帐户”身份验证选项进行设置。

模板设置 WebApi 项目以启用承载令牌、应用程序 cookie 和外部登录 cookie 等,并且暴露的操作具有 Authorize 属性。

我的两个问题是:

1) 如果我要使用 Azure 移动服务在 WP8 应用程序上使用 Google/Twitter 对用户进行身份验证,我怎样才能让 WebApi 允许经过身份验证的用户访问操作?

2) 与#1 相同,但从 ASP.NET MVC 5 网站的角度来看?

从我所见,似乎每个请求都需要一个不记名令牌。要获得这个令牌,我认为我将访问 WebApi 公开的“令牌”端点以获取令牌并且需要与每个请求一起传递是正确的吗?

4

1 回答 1

1

对于 1,您可以使用azure 移动服务 WP8 sdk启动浏览器控件以授权来自外部站点的用户。该代码应与 Windows 商店应用程序中的 WebAuthenticationBroker 类似。

对于 2,具有单独身份验证的 Web api 模板使用 OAuth 2.0 中的隐式流将应用程序访问令牌返回给客户端。在 MVC 应用程序中,您可以将用户重定向到

http://<web api domain address>/api/account/externallogin?provider=Facebook&redirect_uri=<your callback url in MVC app>&response_type=token&client_id=mvc. 

在您的 MVC 视图中,您需要使用 javascript 从 url 片段获取访问令牌,该令牌不会发送到服务器。在您的 Web api 服务器中,您需要在 ApplicationOAuthProvider 中允许客户端 ID 和回调 url。

对于 1 和 2,您没有使用令牌端点来获取令牌。您正在使用授权端点通过隐式流获取令牌。

于 2013-10-24T20:46:17.537 回答