【问题标题】:Secure WebAPi, Windows Phone and MVC Website安全的 WebAPI、Windows Phone 和 MVC 网站
【发布时间】:2013-11-03 10:04:25
【问题描述】:

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

模板设置WebApi项目启用不记名令牌、应用cookies和外部登录cookies等,并且暴露的action带有Authorize属性。

我的两个问题是:

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

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

据我所知,似乎每个请求都需要一个不记名令牌。要获取此令牌,我是否认为我将访问 WebApi 公开的“令牌”端点以获取令牌并且需要随每个请求一起传递?

【问题讨论】:

  • 为什么在这种情况下使用 Azure 移动服务?您可以使用 OWIN 外部身份验证中间件从 google/twitter 登录用户。它是您问题中的必需组件吗?
  • 移动服务的主要原因是它管理浏览器的加载以向用户请求提供者凭据。该计划是针对某个时间点的 Windows 8 应用程序,在这种情况下,我将使用 WebAuthenticationBroker。基本上我只是不确定应用程序、提供程序(Goolgle/Twitter)和 WebApi 之间的流程。
  • 看来您只是错过了手机应用程序中的 WebAuthenticationBroker。您无需为此设置移动服务。您可以只使用移动服务 sdk 代码来启动浏览器控件,并且可以将其指向您的 Web api 端点。 sdk 代码是开源的。你可以在github.com/WindowsAzure/azure-mobile-services/blob/master/sdk/…找到它

标签: asp.net-web-api asp.net-mvc-5


【解决方案1】:

对于 1,您可以使用 azure mobile service WP8 sdk 启动浏览器控件以授权来自外部站点的用户。代码应该和windows store app中的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,您没有使用令牌端点来获取令牌。您正在使用授权端点通过隐式流获取令牌。

【讨论】:

  • 值得一提的是,不仅可以使用隐式流,还可以使用资源所有者密码流来获取有效的oauth2令牌。这允许有一个自定义的身份验证接口,而不是依赖于浏览器自动化。
  • 对于 WP8/Win8 应用程序,我可以使用外部提供商对用户进行身份验证并获取访问令牌,但为了访问 WebApi,我需要一个不记名令牌。我假设,这意味着从 Google/Twitter 的响应中获取信息并将其传递给 WebApi,类似于使用用户名/密码 (asp.net/web-api/overview/security/…) 的示例。此示例向localhost:port/Token 发送请求,内容为“grant_type=password&username=Alice&password=password123”。如果不是外部提供商,我将如何做类似的事情?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多