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

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

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

  • 为每个公司/项目创建一个复杂的声明,其中将包含companyId和用户在该公司中的角色。可以采用JSON格式,也可以采用companyGUID_roleClaim之类的自定义字符串
    但是,当我对此进行小型研究时,我意识到有很多人认为这不是正确的方法,因为他们认为声明应该是简单的键值对。
  • 让应用程序连接/查询身份数据库以检索与活动用户关联的公司/项目和角色,并使用基于这些数据的策略来保护资源。

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

    最佳答案

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

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

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

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

    关于asp.net - Asp.Net Core/IdentityServer综合授权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42116308/

    10-17 02:30