我正在设置一个密钥克隆身份验证服务器,以允许授权用户访问受保护的资源(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?如果没有,我能得到的最好结果是什么?
提前谢谢
答案 0 :(得分:1)
还尝试更改签名算法。 RSA256 ~354 个符号,ESA256 - 86 个符号,HS256 - 43 个符号。可以使用领域 -> 令牌 -> 默认令牌算法或在客户端页面上配置
答案 1 :(得分:0)
令牌大小的一个方面是角色。如果由于您不在乎角色或不需要以其他方式查询角色(通过admin api直接访问),因此不需要将角色包含在令牌中,请使用客户端作用域删除不必要的角色。我知道这可能不是您想要听到的,但它可能有助于某些人将其令牌降至1MB以下;)
提示:您不需要创建“客户范围”。它足以在“客户端配置”选项卡中启用特定范围并将其保留为空:Keycloak Amdmin UI>“客户端”>“选项卡:范围”>“禁用”:允许完整范围