首页 > 解决方案 > Angular 和 Json Web 令牌

问题描述

我有一个由 Angular 应用程序使用的 .net core 2.2 API 项目。为了保护 API,我使用了 JWT。API 和 SPA 都是内部应用程序。

我将 IdentityServer4 与资源所有者密码授予类型一起使用。我听说不建议这样做,但是为每个用户分配了不同的角色,这些角色必须放在 JWT 的角色声明中。这允许 .net 核心授权数据注释授予和限制对每个路由的访问。

我现在的流程是用户登录到 SPA,它将凭据发送到 API。API 使用 Identity 来验证凭据。验证成功后,API 向 IdentityServer4 发送请求以获取 JWT,然后将其发送回 SPA。然后将 JWT 保存到本地存储以用于每个请求。

我想知道我是否应该从 SPA 直接从 IdentityServer4 请求令牌(IS4 可以访问身份上下文并验证 un/pw)?还有我忽略的流程中的任何其他重大缺陷。

标签: c#asp.net-coreidentityserver4

解决方案


您最好将隐式流与 Angular 一起使用。资源所有者密码授权需要您的应用程序读取用户名和密码,这存在可能将密码暴露给攻击者的安全问题。

使用 Implicit 的实现,可以参考这篇文章

此外,您还可以将 Authorization Code 与 PKCE Flow 一起使用:

对于基于 JavaScript 的应用程序,不再推荐使用隐式。请改用带有 PKCE 的授权码。


推荐阅读