无论用户登录如何,如何保护 Angular / .NET Core 2.0 应用程序中的所有 api 调用

Posted

技术标签:

【中文标题】无论用户登录如何,如何保护 Angular / .NET Core 2.0 应用程序中的所有 api 调用【英文标题】:How to secure all api calls in an Angular / .NET Core 2.0 application regardless of user login 【发布时间】:2018-06-27 03:34:19 【问题描述】:

我已经阅读了这里的优秀教程 https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login,使用 .net core 2.0 设置了一个 Angular 5 网站,该网站发布 JWT 令牌以用于验证 API 请求。

一切正常,用户登录,然后获得一个令牌,该令牌作为每个 API 请求的授权标头发送。

不过,我的问题是,无论用户是否登录,我如何保护我网站中的所有 api 请求?

如果我有一个获取所有文章的请求,例如 /api/articles,我希望该网站的匿名访问者能够通过 Angular 前端访问它,但我不希望人们只是点击API 并以这种方式获取数据。

【问题讨论】:

使用 ValidateAntiForgeryToken 见docs.microsoft.com/en-us/aspnet/core/security/… 【参考方案1】:

您可以使用 OpenIDConnect / OAuth2 来识别您的客户端,而无需您的用户登录。对于客户端,我指的是 Angular 应用程序。

这个想法是您的应用程序使用 client_credentials 授权进行身份验证。对于此流程,不需要用户交互。客户端从身份验证服务器获取一个 access_token,包括资源所需的范围。 Here 是一个适用于 IdentityServer4 的示例。

这将保护您的 api 并防止它被直接定位。但是,这并不能保证用户不能从请求中读取令牌并在没有应用程序的情况下使用它。

但如果你将它与 AntiForgeryTokens(也适用于 GET)结合起来并让 access_tokens 短命,那么这样做肯定不值得。

用户登录后,您可以切换到包含用户信息的新 access_token。

【讨论】:

以上是关于无论用户登录如何,如何保护 Angular / .NET Core 2.0 应用程序中的所有 api 调用的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Angular.js 或 Ember.js 的 Spring RESTful Web 服务

如何在无需登录的情况下保护 API

如何使用 OAuth2 和社交登录保护 Spring Boot RESTful 服务

如何使用 useEffect 和 Context API 来检查用户是不是登录并保护路由?

Vue.js:如何保护登录组件免受经过身份验证的用户的影响

登录后如何获取用户名?我正在尝试使用 MSAL(@azure/msal-angular)进行 Azure 登录