Asp.Net核心/ IdentityServer复杂授权

时间:2017-02-08 14:50:25

标签: asp.net asp.net-core identityserver4 asp.net-authorization

对于我正在进行的项目,我需要使用公共身份服务器创建两个独立的(但不是完全不相关的)应用程序。我为此选择了IdentityServer4,它对我来说效果很好。

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

我看到两种方法可以解决这个问题;

  1. 为每个公司/项目创建一个复杂的声明,其中包含companyId和该公司中用户的角色。哪个可能是JSON格式或自定义字符串,如companyGUID_roleClaim 然而,当我对它做了一个小小的研究时,我意识到有很多人认为这是正确的方法,因为他们认为声明应该是简单的键值对。

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

    < / LI>

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

1 个答案:

答案 0 :(得分:5)

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

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

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

leastprivilege写了一篇关于它的好博客,以及为什么你不应该使用权限声明: https://leastprivilege.com/2016/12/16/identity-vs-permissions/