我为一家支持许多应用程序的公司工作,但为了方便用户使用OAuth OIDC单点登录(IdentityServer4),因此他们可以一次登录并访问我们的许多应用程序。使用返回的JWT/访问令牌配置对此OAuth的授权没有问题。
但是因为我们的支持空间太大了,我们被告知要在应用程序级别处理角色和用户权限。这就是我寻求反馈的地方。我目前正在。net Core 6中开发一个新的API(构建API的新手),我想知道连接本质上是第三方OAuth的最佳实践,但也利用特定于应用程序的角色和权限。
身份服务器返回以承载形式传递给API的JWT/访问令牌,但我需要在。net核心后端上映射JWT中包含的用户与应用程序内的用户。然后,应用程序可以为角色/权限拥有单独的映射,并利用这些角色作为API中的限制,但我不确定在保持最佳安全性的同时实现最佳性能的最佳实践是什么。我的想法是创建一个中间件来创建和覆盖userIdentity,但是这样一来,每个调用似乎都是不必要的开销。另一种选择是双重认证,基于cookie的认证设置一次,但我只是不确定最好的方法,或者别人已经成功了。我知道这一定是一个常见的流程,我想得太多了。如有任何见地,不胜感激。
在许多成熟的业务系统中,像您所描述的那样集成身份和业务数据是很常见的。有两种主要的技术:
-
标识系统在令牌发布时访问业务数据,以获得访问令牌中包含的自定义声明。本文解释了这种方法。
-
api查找自定义声明,例如从数据库中,当第一次收到访问令牌时,然后缓存具有相同访问令牌的后续请求的自定义声明。查看我的. net代码,了解一种实现方法。
在这两种情况下,最终结果应该是API业务逻辑获得一个有用的claimsprinprincipal,它支持正确的授权,如本示例类所示。
最后,从信息披露的角度来看,目的是避免在jwt中向互联网客户返回详细的索赔要求。通常使用不透明访问令牌作为隐私保护模式。