KeyClope-接收JWT令牌中的帐户服务角色,但需要自定义角色

KeyClope-接收JWT令牌中的帐户服务角色,但需要自定义角色,jwt,authorization,keycloak,Jwt,Authorization,Keycloak,我使用keydove对用户进行身份验证。我创建了新领域(Efairy领域)、客户端(Efairy后端)和新角色(用户、主持人、管理员)。看起来是这样的: 问题从access_令牌开始: { "exp": 1619466995, "iat": 1619466935, "jti": "fcd20273-fb45-408c-9e20-126653d69719", "iss": &qu

我使用keydove对用户进行身份验证。我创建了新领域(Efairy领域)、客户端(Efairy后端)和新角色(用户、主持人、管理员)。看起来是这样的:

问题从access_令牌开始:

{
  "exp": 1619466995,
  "iat": 1619466935,
  "jti": "fcd20273-fb45-408c-9e20-126653d69719",
  "iss": "http://localhost:8082/auth/realms/efairy-realm",
  "aud": "account",
  "sub": "b1d89dc2-c12d-4c80-beed-c9a6065ec604",
  "typ": "Bearer",
  "azp": "efairy-backend",
  "session_state": "d4a2b283-2f54-4a17-9a27-99db26278ba7",
  "acr": "1",
  "allowed-origins": [
    "",
    "http://localhost:8083"
  ],
  "realm_access": {
    "roles": [
      "offline_access",
      "uma_authorization"
    ]
  },
  "resource_access": {
    "efairy-backend": {
      "roles": [
        "uma_protection",
        "user"
      ]
    },
    "account": {
      "roles": [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  },
  "scope": "profile roles email",
  "clientHost": "172.23.0.1",
  "email_verified": false,
  "clientId": "efairy-backend",
  "groups": [
    "offline_access",
    "uma_authorization"
  ],
  "preferred_username": "service-account-efairy-backend",
  "clientAddress": "172.23.0.1"
}
我已经创建了一个名为“主持人”的新用户,其中包含角色主持人,当我登录到此用户时,我正在接收我在“服务帐户角色”选项卡中设置的角色(resource_access.efairy backend.roles),但我想获取我在“角色映射”选项卡中的“主持人”新用户中声明的角色

登录流如下所示:

  • Im使用以下参数将用户从我的前端应用重定向到keyclock登录页面:/auth/realms/efairy realm/protocol/openid connect/auth?response\u type=code&client\u id=efairy backend&redirect\u uri=http://localhost:8083/auth-重定向url

  • 然后输入正确的用户和密码,然后单击登录

  • 成功登录Im重定向至前端应用程序并使用参数请求令牌后: /auth/realms/efairy realm/protocol/openid connect/token
    授予类型:客户端凭据
    客户端id:efairy后端
    客户机密:
    代码:

  • 答复:

    访问令牌:“eyJhbGciO…AjbA”,
    过期时间:60,
    不在保单之前:1619128217,
    刷新时间:1799,
    刷新令牌:“eyJ…XQ\U R0”,
    范围:“配置文件角色电子邮件”,
    会话状态:“fcf1391d-…b11795c03f80”,
    令牌类型:“持票人”,

  • 有人知道怎么修吗?:)

    成功在Im中唱歌后重定向到前端应用程序,并使 请求具有参数的令牌:
    /auth/realms/efairy realm/protocol/openid connect/token
    授权类型:客户端凭据
    客户端id:efairy后端
    客户端密码:
    代码:

    执行此操作时,将代表用户
    “服务帐户efairy后端”
    忽略令牌,该用户是由KeyClope为客户端“efairy后端”创建的用户

    我已经创建了一个名为“版主”的新用户,该用户具有版主角色,并且在即时消息发布时 登录到我正在接收的此用户 我在选项卡服务中设置的角色(resource_access.efairy backend.roles) 帐户角色,但我希望获得我在新文档中声明的角色 用户在“角色映射”选项卡中调用了主持人

    您将获得在帐户角色中设置的角色,因为这些角色分配给客户端(即用户
    “服务帐户efairy后端”
    )。由于用户
    主持人
    不是该交互的一部分,因此角色
    主持人
    不是令牌的一部分

    此外,客户端凭据不是前端应用程序的合适流程。从中可以看出:

    客户端凭据流
    机器对机器(M2M)应用, 例如在后端运行的CLI、守护进程或服务 系统验证和授权应用程序,而不是用户。对于 在这种情况下,典型的身份验证方案,如用户名+密码 或者社交登录没有意义。相反,M2M应用程序使用客户端 凭证流(在OAuth 2.0 RFC 6749第4.4节中定义),在 他们将客户ID和客户机密传递给 对自己进行身份验证并获取令牌

    在我看来,你的第三步是可以取消的。在第二步之后:

    然后输入正确的用户和密码,然后单击登录

    您应该代表用户
    版主省略一个令牌