对于我正在进行的项目,我需要使用公共身份服务器创建两个独立的(但不是完全不相关的)应用程序。我为此选择了IdentityServer4,它对我来说效果很好。
但是,我需要能够将用户分配给多个公司/项目(是的,这是一个真实的案例),并且可能在每个公司/项目中分配不同的角色。但是,我无法为此设计索赔结构。
我看到两种方法可以解决这个问题;
为每个公司/项目创建一个复杂的声明,其中包含companyId和该公司中用户的角色。哪个可能是JSON格式或自定义字符串,如companyGUID_roleClaim
然而,当我对它做了一个小小的研究时,我意识到有很多人认为这是正确的方法,因为他们认为声明应该是简单的键值对。
让应用程序连接/查询Identity数据库,以检索与活动用户关联的公司/项目和角色,并使用基于这些数据的策略保护资源。
< / LI> 醇>也许我从错误的一面看,或者这两个中的一个是可以接受的。或者还有另一种解决方案。能帮我找到解决这个问题的方法吗?
答案 0 :(得分:5)
如果您打算使用第一种方法,可能会遇到一些问题。您在声明中指定的角色在您的两个应用程序中可能具有不同的含义,而不是完全不相关的应用程序。
声明代表用户的身份,而不是他/她允许访问的身份。
您可以编写一个授权服务,该服务将从数据库中提供所需的授权数据。您可以通过编写授权策略在两个应用程序中进行授权。您可以使用[Authorize(Policy="MyPolicy"]
将它们加以保护来保护您的资源。
leastprivilege写了一篇关于它的好博客,以及为什么你不应该使用权限声明: https://leastprivilege.com/2016/12/16/identity-vs-permissions/