2

对于我正在开发的项目,我需要使用通用身份服务器创建两个单独的(但不完全不相关的)应用程序。我为此选择了IdentityServer4,它对我来说效果很好。Asp.Net核心/身份服务器复杂授权

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

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

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

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

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

回答

4

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

索赔代表用户的身份,而不是他/她被允许访问的内容。

你可以写一个授权服务将从数据库提供所需的授权数据。您可以通过编写授权政策来授权这两个应用程序。你可以用[Authorize(Policy="MyPolicy"]来装饰它们来保护你的资源。

leastprivilege写了一篇不错的博客吧,为什么你不应该使用索赔权限: https://leastprivilege.com/2016/12/16/identity-vs-permissions/