首页 > 解决方案 > 在 Keycloak 中生成 JWT Token 并获取公钥以在第三方平台上验证 JWT Token

问题描述

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

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

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

标签: jwtkeycloakapigeekeycloak-services

解决方案


这在这篇中篇文章的帮助下得到了解决。我在下面提到的所有步骤在文章中都有详细的描述(令牌部分请参阅步骤 1 至 9,其他步骤与 Spring Boot 应用程序相关),但我想对参考我的问题的那些步骤进行概述。

使用 KeyCloak 生成 JWT 令牌

  1. 安装并运行 KeyCloak 服务器并转到端点(例如http://localhost:8080/auth)。使用初始管理员登录名和密码(用户名=admin,密码=admin)登录。
  2. openid-connect使用as创建一个领域和一个客户端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-----

在第三方平台上验证令牌

  • jwt.io是一个很棒的验证 JWTtoken 的网站。我们所要做的就是粘贴令牌和公钥。在此处阅读网站介绍,了解有关验证令牌的更多信息。

推荐阅读