当前位置: 首页 > 知识库问答 >
问题:

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

史懿轩
2023-03-14

配置1如下所示。配置2如下所示。

问题始于access_token:

{
  "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"
}

我创建了一个名为moderator的新用户,并使用角色moderator,当我登录到该用户时,我接收我在选项卡“服务帐户角色”中设置的角色(resource_access.efairy-backend.roles),但我希望获得我在角色映射选项卡中声明的角色。

答复:

access_token:“EYJHBGCIO...AJBA”,
expires_in:60,
not-befor-policy:1619128217,
refresh_expires_in:1799,
refresh_token:“EYJ..XQ_R0”,
scope:“Profile roles Email”,
session_state:“FCF1391D-...B11795C03F80”,
token_type:“Bearer”,

有人知道怎么修吗?:)

共有1个答案

沃博裕
2023-03-14

在Im重定向到前端应用程序中成功歌唱后,使用参数:
/auth/realms/efairy-realm/protocol/openid-connect/token
grant_type:client_credentials
client_id:efairy-backend
client_secret:
代码: 请求令牌

当您执行此操作时,将代表用户“service-account-efairy-backend”省略令牌,该用户是由Keycloak为客户端“efairy-backend”创建的用户。

我创建了一个名为moderator的新用户,并使用角色moderator,当我登录到该用户时,我接收我在选项卡“服务帐户角色”中设置的角色(resource_access.efairy-backend.roles),但我希望获得我在角色映射选项卡中声明的角色。

您将获得在帐户角色中设置的角色,因为这些角色被分配给客户端(即用户“service-account-efairy-backend”)。因为用户moderator不是交互的一部分,所以角色moderator不是令牌的一部分。

此外,客户端凭据并不适合前端应用程序。从源代码中可以读到:

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

在我看来,你的第三步可以移除了。第二步之后:

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

 类似资料:
  • 我开发了以下代码,用于自动执行我的一些实例的启动/停止任务,这些实例不需要一直运行,而是在特定范围内运行。 这是我的代码:https://github.com/maartinpii/gcp-shst 我按照谷歌云平台指南(参考:https://cloud.google.com/iam/docs/understanding-service-accounts https://cloud.google.

  • 我试图创建一个服务帐户与一个已知的,固定的令牌Jenkins使用,以部署到Kubernetes的东西。我使用以下YAML创建了令牌:

  • 我目前正在使用KubernetesPodoperator在库伯内特斯集群上运行Pod。我收到以下错误: 库伯内特斯。客户RestApiException:(403)原因:禁止 HTTP响应标头:HTTPHeaderDict({'Auding-Id': '', 'Cache-Control':'no-cache, Private','Content-Type':'Application/json',

  • 我一直试图用角色导入预先配置的客户机和服务帐户,所以我的json文件看起来像 我还尝试在导入的领域配置中设置客户端,但在这两种情况下,我都有以下问题 null Keycloak版本为:8.0.0 谢了。

  • 我已经基于命名的路由为Laravel(4.2)创建了自定义角色管理器,例如: 基本上,任何注册为

  • 我已经从GCP控制台创建了和一个自定义角色。 但是,当试图关联它们时,它会失败,如下所示: 知道为什么吗?