C# Angular和Json Web标记

C# Angular和Json Web标记,c#,asp.net-core,identityserver4,C#,Asp.net Core,Identityserver4,我有一个.NETCore2.2API项目,它被angular应用程序使用。为了保护API,我使用了JWT。API和SPA都是内部应用程序 我正在将IdentityServer4与资源所有者密码授权类型一起使用。我听说这是不推荐的,但有不同的角色分配给每个用户,必须放在JWT的角色声明中。这允许.net cores授权数据批注授予和限制对每个路由的访问 我现在拥有的流程是用户登录SPA,SPA将凭据发送到API。API使用标识来验证凭据。验证成功后,API向IdentityServer4发送请求以

我有一个.NETCore2.2API项目,它被angular应用程序使用。为了保护API,我使用了JWT。API和SPA都是内部应用程序

我正在将IdentityServer4与资源所有者密码授权类型一起使用。我听说这是不推荐的,但有不同的角色分配给每个用户,必须放在JWT的角色声明中。这允许.net cores授权数据批注授予和限制对每个路由的访问

我现在拥有的流程是用户登录SPA,SPA将凭据发送到API。API使用标识来验证凭据。验证成功后,API向IdentityServer4发送请求以获取JWT,然后将JWT发送回SPA。然后将JWT保存到本地存储器,以便在每次请求时使用

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

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

对于使用隐式的实现,您可以参考

此外,您还可以在PKCE流中使用授权代码:

对于基于JavaScript的应用程序,不再建议使用隐式。将授权代码改为与PKCE一起使用

你最好用有棱角的。资源所有者密码授予需要您的应用程序读取用户名和密码,这两个密码存在安全问题,可能会将密码暴露给攻击者

对于使用隐式的实现,您可以参考

此外,您还可以在PKCE流中使用授权代码:

对于基于JavaScript的应用程序,不再建议使用隐式。将授权代码改为与PKCE一起使用


最初我是从JWT令牌开始的,但由于一些复杂性,后来我决定使用定制令牌。如需更详细的解释,请阅读

下图展示了我实现的请求流程:

最初我使用JWT令牌,但由于一些复杂问题,后来我决定使用自定义令牌。如需更详细的解释,请阅读

下图展示了我实现的请求流程:

这篇文章可能会有帮助:这篇文章可能会有帮助: