我正在尝试从 keycloack 领域密钥获取私钥。 我可以使用获取公钥 Open-id/certs api.请告诉我是否能够在 keycloack 中获取领域的私钥。
我使用私钥编写测试来篡改 JWT 有效负载以验证应用程序。我遇到了所有安全陷阱😀
使用 MySQL 获取私钥很简单:
use <kc_db_schema>;
SELECT VALUE FROM COMPONENT_CONFIG CC INNER JOIN COMPONENT C INNER JOIN REALM R ON(CC.COMPONENT_ID = C.ID AND R.ID = C.REALM_ID)
WHERE R.NAME='your-realm-name' AND C.NAME = 'rsa-generated' AND CC.name = 'privateKey';
使用这个私钥值我可以签署我的有效负载。
在 Python PyJWT 中,将带有换行符的 '-----BEGIN RSA PRIVATE KEY-----' / '-----END RSA PRIVATE KEY-----' 添加到密钥中非常重要:
private_key = b"-----BEGIN RSA PRIVATE KEY-----\n<my privateKey from SQL query>\n-----END RSA PRIVATE KEY-----"
jwt_encoded = jwt.encode({my payload}, private_key, algorithm="RS256")
KeyManager keyManager = new DefaultKeyManager(keycloakSession);
Key key = keyManager.getActiveKey(keycloakSession.getContext().getRealm(), KeyUse.SIG, "RS256").getPrivateKey();