gpt4 book ai didi

identityserver3 - 身份服务器 - 身份/资源范围 - 客户端如何获取有关用户的资源声明

转载 作者:行者123 更新时间:2023-12-04 07:01:11 24 4
gpt4 key购买 nike

我已经阅读了 Dominik 关于使用 Identity Server 进行身份验证与权限建模的博客文章 ( https://leastprivilege.com/2016/12/16/identity-vs-permissions/ )。由于我主要使用基于角色的授权,因此我可以使用 IdentityServer 作为不同客户端和 API 的身份验证/授权端点。

我的问题是如何正确建模身份和资源范围?客户端可以知道用户可以在特定资源上使用哪些角色吗?如果是,客户端是否只能知道所请求资源范围的用户角色(而不是所有范围的所有角色)。
就我理解的概念而言,如果我通过 UserInfo 端点请求关于用户的声明,我会收到由请求的身份范围内列出的 claimTypes 过滤的声明。这意味着如果客户端请求角色范围(具有角色声明类型的身份范围),UserInfo 端点将响应所有角色声明,包括其他应用程序。

让我们以简单的 MVC 示例为例,其中 MVC 客户端通过 REST 与 API 进行通信。
MVC 客户端(客户端)使用 Cookie/OIDC Auth 中间件和请求:ResponseType = "id_token token", Scope = "openid profile api" .
API(资源)使用 IdentityServerBearerToken Auth 中间件并要求:RequiredScopes = "api" .
客户端具有基于 api 角色应该可见的 UI 元素。如何从客户端访问角色,因为 UserInfo 端点将只返回基于身份范围的声明?
客户端是否应该询问 API(资源),哪些操作是可能的?并基于响应显示/隐藏 UI 元素?

感谢您的任何帮助。

最佳答案

因此 IdentityServer3 和 IdentityServer4 之间的情况有所不同。我下面的示例基于 IdentityServer4。

你需要做一些事情:

  • 定义一个 IdentityResource授予访问 role 的权限宣称。
  • 包括那个新 IdentityResource在客户的AllowedScopes
  • 让客户要求您的新 IdentityResource作为范围。

  • 所以我所做的如下:

    我在哪里定义我的资源:
    new IdentityResource
    {
    Name = "roles",
    UserClaims = { JwtClaimType.Role }
    }

    将我的客户定义为:
    var client = new Client
    {
    // .. other stuff
    AllowedScopes =
    {
    IdentityServerConstants.StandardScopes.OpenId,
    IdentityServerConstants.StandardScopes.Profile,
    "roles"
    }
    }

    然后在我的 javascript 客户端中使用以下内容:
    new oidc.OidcClient({
    // .. other stuff
    scope: 'openid profile roles'
    });

    然后我就能看到所有 JwtClaimType.Role我添加到 ClaimPrincipal 的声明在我的 javascript 客户端中。

    关于identityserver3 - 身份服务器 - 身份/资源范围 - 客户端如何获取有关用户的资源声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43582290/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com