Asp.Net Core / IdentityServer综合授权

Has*_*san 3 asp.net asp.net-authorization asp.net-core identityserver4

对于我正在从事的项目,我需要使用公共身份服务器创建两个单独的(但并非完全无关)应用程序。我为此选择了IdentityServer4,它对我来说很好用。

但是,我需要能够将用户分配到多个公司/项目(是的,这是现实生活中的情况),并且可能在每个公司/项目中分配不同的角色。但是,我无法为此设计索赔结构。

我看到两种可以解决此问题的方法;

  1. 为每个公司/项目创建一个复杂的声明,其中将包含companyId和用户在该公司中的角色。可以是JSON形式,也可以是自定义字符串,例如,companyGUID_roleClaim 但是,当我进行小型研究时,我意识到有很多人认为这不是正确的方法,因为他们认为声明应该是简单的键值对。

  2. 让应用程序连接/查询身份数据库,以检索与活动用户关联的公司/项目和角色,并使用基于这些数据的策略来保护资源。

也许我从错误的角度看待它,或者这两个中的一个是可以接受的。或者还有另一种解决方案。您能帮我找到解决这个问题的方法吗?

use*_*336 5

如果要使用第一种方法,可能会遇到一些问题。您在声明中指定的角色在两个并非完全不相关的应用程序中可能具有不同的含义。

声明代表用户的身份,而不是用户被允许访问的身份。

您可以编写授权服务,该服务将从数据库中提供所需的授权数据。通过编写授权策略,您可以在两个应用程序中进行授权。您可以使用取消对资源的保护,以保护您的资源[Authorize(Policy="MyPolicy"]

Minimumprivilege撰写了一个不错的博客,以及为什么不应该使用权限声明:https ://leastprivilege.com/2016/12/16/identity-vs-permissions/