【问题标题】:Asp.Net Core / IdentityServer Complex AuthorizationAsp.Net Core / IdentityServer 复杂授权
【发布时间】:2017-06-26 06:12:59
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2018-04-03
      • 2020-06-10
      • 1970-01-01
      • 2014-09-02
      相关资源
      最近更新 更多