You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak登录后如何从KEYCLOAK_IDENTITY cookie获取Bearer Token并校验角色

问题解答

首先明确:KEYCLOAK_IDENTITY 是Keycloak的会话状态Cookie,仅存储认证会话的元数据,本身不包含你需要的Bearer Token(Access Token),无法直接从该Cookie中提取可用的API调用凭证。

一、获取Bearer Token的正确方案

你当前用的是OAuth2授权码流程,可通过以下两种方式获取Bearer Token:

  • 方案1:使用官方keycloak-js适配器(React项目推荐)
    这是最省事的方案,不需要自己处理授权码、Token刷新等逻辑,示例代码如下:
    import Keycloak from 'keycloak-js';
    
    // 配置和你的Keycloak客户端参数保持一致
    const keycloakInstance = new Keycloak({
      url: "https://10.10.10.10:8445/auth",
      realm: "abcrealm",
      clientId: "abc-client"
    });
    
    // 初始化时自动触发登录校验
    keycloakInstance.init({ onLoad: 'login-required' }).then(isAuthenticated => {
      if (isAuthenticated) {
        // 拿到的token字段就是你需要的Bearer Token
        const bearerToken = keycloakInstance.token;
        // 调用后端API时,请求头添加`Authorization: Bearer ${bearerToken}`即可
      }
    })
    
  • 方案2:手动用授权码兑换Token
    如果你不想引入官方适配器,可以自己完成授权码兑换流程:
    1. Keycloak登录完成跳转回你的前端页面时,从URL参数中提取code值
    2. 向Keycloak Token端点https://10.10.10.10:8445/auth/realms/abcrealm/protocol/openid-connect/token发送POST请求,请求参数为:

      grant_type=authorization_code
      client_id=abc-client
      code=你提取到的授权码
      redirect_uri=https://10.10.10.10:3001/

    3. 接口成功返回后,响应中的access_token字段就是你需要的Bearer Token。

二、校验用户合法角色的方案

角色校验分为前端页面权限控制、后端接口权限校验两个环节,后端校验必须做,避免前端篡改导致权限越权:

  • 前端校验(仅做页面交互控制)
    用keycloak-js适配器可以直接调用内置方法快速校验角色:
    // 校验是否拥有全局Realm角色
    const hasRealmRole = keycloakInstance.hasRealmRole('需要的角色名');
    // 校验是否拥有当前客户端专属角色
    const hasClientRole = keycloakInstance.hasResourceRole('需要的角色名', 'abc-client');
    
    // 校验通过后再展示对应权限的操作按钮/页面
    
    你也可以自行解析Access Token/ID Token的Payload部分,从realm_access.roles字段取全局角色列表,从resource_access.abc-client.roles字段取当前客户端角色列表自行判断。
  • 后端校验(强制要求)
    后端收到请求携带的Bearer Token后,先校验Token的签名合法性、有效期、签发方、受众是否符合要求,校验通过后解析Payload,和前端一样从realm_access、resource_access字段提取角色,判断当前请求的接口是否匹配用户权限。
  • 如果你需要获取完整用户Profile
    可以携带Bearer Token调用Keycloak用户信息端点https://10.10.10.10:8445/auth/realms/abcrealm/protocol/openid-connect/userinfo,返回结果包含完整的用户基础信息、角色列表。

内容的提问来源于stack exchange,提问作者vaibhav singhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:24:00