在Keycloak中生成JWT令牌,并获取公共密钥以在第三方平台上验证JWT令牌

Ami*_*dav 8 jwt apigee keycloak keycloak-services

后端服务器有一个端点,该端点在ping时给出JSON响应,并受Apigee Edge Proxy保护。当前,该端点没有安全性,我们希望为所有发出请求的客户端实施仅承载令牌认证。向API发出请求的所有客户端都将在Authorization Bearer中发送该JWT令牌,并且Apigee Edge将用于验证JWT令牌。

如何使用Keycloak生成此JWT令牌?

此外,Apigee需要一个公共密钥智威汤逊令牌的来源(其签署的JWT令牌服务器,在这种情况下,我相信这是Keycloak)。因此,我的第二个疑问是,当我使用Keycloak生成JWT令牌时,如何获取公用密钥,服务器将使用该公用密钥来验证令牌是否有效?

Ami*_*dav 10

我终于可以从这篇中篇文章找到这个问题的答案。我在下面提到的所有步骤在文章中都有详细的描述(有关令牌部分,请参阅步骤1至9,其他步骤与Spring Boot应用程序有关),但是我想对这些问题进行概述。

使用KeyCloak生成JWT令牌

  1. 安装并运行KeyCloak服务器,然后转到端点(例如,http:// localhost:8080 / auth)。使用初始管理员登录名和密码(用户名= admin,密码= admin)登录。
  2. 创建一个Realm和一个Client openid-connect作为Client Protocol
  3. 创建用户,角色并将客户端角色映射到用户。
  4. 假设服务器处于打开状态localhost,请访问http:// localhost:8080 / auth / realms / dev / .well-known / openid-configuration,以获取有关所有安全端点的详细信息
  5. http:// localhost:8080 / auth / realms / dev / protocol / openid-connect / token向此URL发送带有有效详细信息的POST请求,从而提供了JWTtoken。

获取KeyCloak服务器的公钥

  • 转到Realm Settings并单击,Public key弹出带有该领域服务器的公共密钥。请参阅此图像以更好地理解。
  • 添加-----BEGIN PUBLIC KEY-----并追加-----END PUBLIC KEY-----到此复制的公共密钥以在任何地方使用它来验证JWTtoken。您的公钥最终应该看起来像这样:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhAj9OCZd0XjzOIad2VbUPSMoVK1X8hdD2Ad+jUXCzhZJf0RaN6B+79AW5jSgceAgyAtLXiBayLlaqSjZM6oyti9gc2M2BXzoDKLye+Tgpftd72Zreb4HpwKGpVrJ3H3Ip5DNLSD4a1ovAJ6Sahjb8z34T8c1OCnf5j70Y7i9t3y/j076XIUU4vWpAhI9LRAOkSLqDUE5L/ZdPmwTgK91Dy1fxUQ4d02Ly4MTwV2+4OaEHhIfDSvakLBeg4jLGOSxLY0y38DocYzMXe0exJXkLxqHKMznpgGrbps0TPfSK0c3q2PxQLczCD3n63HxbN8U9FPyGeMrz59PPpkwIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

在第三方平台上验证令牌

  • jwt.io是验证JWTtokens的绝佳网站。我们要做的就是粘贴令牌和公钥。在此处阅读网站简介,以了解有关验证令牌的更多信息。

  • 如果您动态需要公钥,可以从 http(s)://<hostname>/auth/realms/<realm name> 检索它 (10认同)
  • @TarunPande,您可以使用公钥在本地验证令牌签名,例如在 php 中使用“openssl_verify(string $data, string $signature, mix $pub_key_id, mix $signature_alg=null)” (2认同)