Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.Net Core/IdentityServer复杂授权_Asp.net_Asp.net Core_Identityserver4_Asp.net Authorization - Fatal编程技术网

Asp.Net Core/IdentityServer复杂授权

Asp.Net Core/IdentityServer复杂授权,asp.net,asp.net-core,identityserver4,asp.net-authorization,Asp.net,Asp.net Core,Identityserver4,Asp.net Authorization,对于我正在进行的项目,我需要使用一个公共标识服务器创建两个独立(但并非完全无关)的应用程序。我选择IdentityServer4就是为了这个目的,它对我来说很好 但是,我需要能够将用户分配到多个公司/项目(是的,这是一个真实的案例),并可能分配到每个公司/项目中的不同角色。然而,我无法为此设计索赔结构 我认为有两种方法可以解决这个问题 为每个公司/项目创建一个复杂的索赔,其中将包含公司ID和用户在该公司中的角色。可以是JSON格式或自定义字符串,如companyGUID\u roleClaim

对于我正在进行的项目,我需要使用一个公共标识服务器创建两个独立(但并非完全无关)的应用程序。我选择IdentityServer4就是为了这个目的,它对我来说很好

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

我认为有两种方法可以解决这个问题

  • 为每个公司/项目创建一个复杂的索赔,其中将包含公司ID和用户在该公司中的角色。可以是JSON格式或自定义字符串,如
    companyGUID\u roleClaim
    然而,当我做了一个关于它的小研究时,我意识到有很多人认为这不是正确的方法,因为他们认为声明应该是简单的键值对

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


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

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

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

    您可以编写一个授权服务,从数据库中提供所需的授权数据。然后,您可以通过编写授权策略在这两个应用程序中进行授权。您可以通过使用
    [Authorize(Policy=“MyPolicy”]
    对资源进行去编码来保护资源

    leastprivilege为此写了一篇很好的博客,以及为什么不应该使用权限声明: