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

And*_*rew 5 security authorization single-page-application asp.net-mvc-5 asp.net-web-api2

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

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

对于管理员,我们使用bearer令牌内置了基本身份验证,就像Internet上的许多示例向我们展示的那样,但是现在我们需要每个用户登录后才能看到任何产品。并不是我们真正想要的网上商店;-)

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

AllowAnonymous属性使特定的API调用再次可用于世界,因此这也是死胡同。

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

在没有让我们的网上商店的匿名访问者登录的情况下,保护我们的Web Api的最佳和最安全的方法是什么?

目前的解决方案:尽管我对这种解决方案并不满意,但它现在仍然可以使用。我们为特定域启用了CORS,从而实现了OAuth隐式流程。

Mvd*_*vdD 2

您应该查看OAuth 2.0 客户端凭据流程。OAuth 中的客户端是应用程序,而不是使用该应用程序的用户。这样您就可以确保只有您的 SPA 应用程序可以访问后端 API。

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