在SPA网上商店中实施Web API身份验证的最佳实践

时间:2014-11-25 12:50:29

标签: security asp.net-mvc-5 authorization single-page-application asp.net-web-api2

目前我们正在建立一个网上商店作为SPA申请。所有SKU信息均由Web Api 2服务提供。

当然,每个访问者都可以公开访问网上商店,目前只有一个用户可以登录来管理网上商店:管理员。

对于我们使用bearer令牌进行基本身份验证的管理员,因为互联网上的大量示例向我们展示了,但现在我们需要每个用户在他们看到任何产品之前登录。对于网上商店而言,这并不是我们想到的;-)

我们想要实现的是,我们的Web Api不适用于全世界,但仅适用于我们的SPA应用程序。每篇关于授权的博客文章或教程似乎都假设总有一个用户需要登录,在我们的例子中只有一个用户:管理员。

AllowAnonymous属性再次向全世界提供特定的API调用,因此这也是一个死胡同。

基本上,它可以防止任何其他应用程序(网络或移动设备)从我们的Web Api中获取数据。

如果没有我们网站的匿名访问者登录,那么保护我们的Web Api的最佳和最安全的方法是什么?

现在的解决方案:尽管我对这个解决方案并不百分之百,但它现在还可以使用。我们为特定域启用了CORS,实现了OAuth Implicit流程。

3 个答案:

答案 0 :(得分:2)

你应该看一下OAuth 2.0 client credentials flow。 OAuth中的客户端是应用程序,而不是使用该应用程序的用户。这样,您就可以确保只有您的SPA应用可以访问后端API。

只允许访问管理员的部分,您可以使用[Authorize(roles = administrator)]属性进行装饰,这可以防止任何其他角色访问。

答案 1 :(得分:1)

我认为Json Web Token可以为您提供帮助。这个article提供了有关使用Json Web Token进行web api的粒度授权的更多信息。

答案 2 :(得分:0)

OAuth 2.0本质上是不安全的,完全依赖于SSL。它没有加密,大多数最新的网络专家都暗示它已经死了。这再次与您需要的安全性相关。如果它适用于数据不具有财务或医疗功能的社交SPA,并且SSL安全性足够好,那么OpenID或OAuth2也许是合适的。

更好的解决方案是为Web API身份验证流程实现Identity 2.0,然后使用类似Hawk协议的HTTP MAC实现。请查看此内容:https://github.com/webapibook/hawknet以获取示例。

对于OAuth2框架和可扩展的解决方案,请查看GitHub上的Thinktecture.IdentityServer3

对于轻量级.net 4.5 Web API令牌化解决方案,请查看GitHub上的Thinktecture.IdentityServer2。

希望它有所帮助。