如何减少Keycloak中访问/刷新令牌的大小?

时间:2019-05-02 15:40:51

标签: oauth-2.0 jwt token keycloak

我正在设置一个密钥克隆身份验证服务器,以允许授权用户访问受保护的资源(OAuth2.0)。

将通过具有一定限制的嵌入式设备进行访问。主要限制是访问令牌和刷新令牌如果长度超过256个字符,则无法保存。

尽管The OAuth 2.0 Authorization Framework中没有说明令牌的大小,但是所有身份提供者都可以自由决定令牌的大小。例如,Facebook的令牌少于256个字节,与Google相同。但是对于密钥克隆,我得到了大约850个字节的令牌!我已经尝试了管理控制台中提供的几种加密算法,但仍然获得了较大的jwt令牌。 解码jwt会得到以下结果:

{
  "jti": "d654564qsd-5fqsdf5-4qsdf-8b25qs-b556456",
  "exp": 1556284611,
  "nbf": 0,
  "iat": 1556270211,
  "iss": "http://myadress:myport/auth/realms/myrealm",
  "aud": "myapp",
  "sub": "45464-445645-4b45641e-456456-45645646",
  "typ": "Bearer",
  "azp": "myapp",
  "auth_time": 1556269490,
  "session_state": "cb95519c-0bf8-4b6b-94e4-a10d9000dbd2",
  "acr": "0",
  "allowed-origins": [],
  "realm_access": {
    "roles": [
      "user"
    ]
  },
  "resource_access": {},
  "scope": "readwrite"
}

我实际上对令牌中的数据完全不感兴趣,并且我没有对其进行解析。我只需要令牌即可访问资源。 因此,是否有办法将令牌的大小减小到小于256?如果没有,我能得到的最好结果是什么?

提前谢谢

2 个答案:

答案 0 :(得分:1)

还尝试更改签名算法。 RSA256 ~354 个符号,ESA256 - 86 个符号,HS256 - 43 个符号。可以使用领域 -> 令牌 -> 默认令牌算法或在客户端页面上配置

答案 1 :(得分:0)

令牌大小的一个方面是角色。如果由于您不在乎角色或不需要以其他方式查询角色(通过admin api直接访问),因此不需要将角色包含在令牌中,请使用客户端作用域删除不必要的角色。我知道这可能不是您想要听到的,但它可能有助于某些人将其令牌降至1MB以下;)

提示:您不需要创建“客户范围”。它足以在“客户端配置”选项卡中启用特定范围并将其保留为空:Keycloak Amdmin UI>“客户端”>“选项卡:范围”>“禁用”:允许完整范围