我正在使用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公开的“令牌”端点以获取令牌并且需要与每个请求一起传递吗?
答案 0 :(得分:1)
对于1,您可以使用azure mobile service WP8 sdk启动浏览器控件以从外部站点授权用户。该代码应与Windows应用商店中的WebAuthenticationBroker类似。
对于2,具有单独身份验证的web api模板在OAuth 2.0中使用implicit flow将应用程序访问令牌返回给客户端。在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,您没有使用令牌端点来获取令牌。您正在使用授权端点通过隐式流获取令牌。