如何从keycloack领域密钥中检索私钥?

问题描述 投票:0回答:5

我正在尝试从 keycloack 领域密钥获取私钥。 我可以使用获取公钥 Open-id/certs api.请告诉我是否能够在 keycloack 中获取领域的私钥。

private-key keycloak-rest-api
5个回答
8
投票

我使用私钥编写测试来篡改 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")



0
投票


0
投票

KeyManager keyManager = new DefaultKeyManager(keycloakSession); Key key = keyManager.getActiveKey(keycloakSession.getContext().getRealm(), KeyUse.SIG, "RS256").getPrivateKey();



0
投票
此处

),您可以轻松检查 JSON 文件并找到您需要的精确信息。 这是在您的 Keycloak 服务器停止的情况下,在主文件夹中执行:

bin\kc.[sh|bat] export --file "name-of-your-realm.json" --realm <your-realm>

其中 
"name-of-your-realm.json"

应替换为未来导出文件的路径,并将

<your-realm>
替换为领域名称。
最后,正如我之前所说,打开 JSON 文件并按 Ctrl + F 

privateKey

rsa-generated
或任何您需要的信息。


-2
投票
这就是为什么它们被称为私钥

,你不能期望通过 API 获得私钥。 私钥对于持有者来说是私有的,您可以在

这里

了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.