在Keycloak中生成JWT Token并获取public key在第三方平台验证JWT token
Generate JWT Token in Keycloak and get public key to verify the JWT token on a third party platform
后端服务器有一个端点,它在 ping 时给出 JSON 响应,并受 Apigee Edge Proxy 保护。目前,此端点没有安全性,我们希望为所有发出请求的客户端实施仅持有者令牌身份验证。
向 API 发出请求的所有客户端都将在 Authorization Bearer 中发送该 JWT 令牌,Apigee Edge 将用于验证 JWT 令牌。
如何使用 Keycloak 生成此 JWT 令牌?
此外,Apigee 需要 JWT 令牌来源 的 public 密钥(签署 JWT 的服务器令牌,在这种情况下,我相信那是 Keycloak)。
所以我的第二个疑问是,当我使用 Keycloak 生成 JWT 令牌时,如何获取服务器用来验证令牌是否有效的 public 密钥?
这是在 this medium article 的帮助下解决的。我在下面提到的所有步骤在文章中都有详细说明(令牌部分参考步骤 1 到 9,其他步骤与 Spring 启动应用程序相关)但我想对这些步骤进行概述参考我的问题。
使用 KeyCloak 生成 JWT 令牌
- 安装和运行 KeyCloak 服务器并转到端点(例如http://localhost:8080/auth)。使用初始管理员登录名和密码登录(用户名=admin,密码=admin)。
- 使用
openid-connect
作为 Client Protocol
创建一个领域和一个客户端。
- 创建用户、角色并将客户端角色映射到用户。
- 假设服务器在
localhost
上,访问 http://localhost:8080/auth/realms/dev/.well-known/openid-configuration 会提供有关所有安全端点的详细信息
- http://localhost:8080/auth/realms/dev/protocol/openid-connect/token 向此 URL 发送一个包含有效详细信息的 POST 请求给 JWTtoken with.
获取KeyCloak服务器的public密钥
- 转到
Realm Settings
并单击 Public key
会弹出该领域服务器的 Public 键。请参阅 this image 以获得更好的理解。
- 添加
-----BEGIN PUBLIC KEY-----
并将 -----END PUBLIC KEY-----
附加到此复制的 public 密钥以在任何地方使用它来验证 JWTtoken。您 public 密钥最终应该看起来像这样:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhAj9OCZd0XjzOIad2VbUPSMoVK1X8hdD2Ad+jUXCzhZJf0RaN6B+79AW5jSgceAgyAtLXiBayLlaqSjZM6oyti9gc2M2BXzoDKLye+Tgpftd72Zreb4HpwKGpVrJ3H3Ip5DNLSD4a1ovAJ6Sahjb8z34T8c1OCnf5j70Y7i9t3y/j076XIUU4vWpAhI9LRAOkSLqDUE5L/ZdPmwTgK91Dy1fxUQ4d02Ly4MTwV2+4OaEHhIfDSvakLBeg4jLGOSxLY0y38DocYzMXe0exJXkLxqHKMznpgGrbps0TPfSK0c3q2PxQLczCD3n63HxbN8U9FPyGeMrz59PPpkwIDAQAB
-----END PUBLIC KEY-----
在第三方平台上验证令牌
后端服务器有一个端点,它在 ping 时给出 JSON 响应,并受 Apigee Edge Proxy 保护。目前,此端点没有安全性,我们希望为所有发出请求的客户端实施仅持有者令牌身份验证。 向 API 发出请求的所有客户端都将在 Authorization Bearer 中发送该 JWT 令牌,Apigee Edge 将用于验证 JWT 令牌。
如何使用 Keycloak 生成此 JWT 令牌?
此外,Apigee 需要 JWT 令牌来源 的 public 密钥(签署 JWT 的服务器令牌,在这种情况下,我相信那是 Keycloak)。 所以我的第二个疑问是,当我使用 Keycloak 生成 JWT 令牌时,如何获取服务器用来验证令牌是否有效的 public 密钥?
这是在 this medium article 的帮助下解决的。我在下面提到的所有步骤在文章中都有详细说明(令牌部分参考步骤 1 到 9,其他步骤与 Spring 启动应用程序相关)但我想对这些步骤进行概述参考我的问题。
使用 KeyCloak 生成 JWT 令牌
- 安装和运行 KeyCloak 服务器并转到端点(例如http://localhost:8080/auth)。使用初始管理员登录名和密码登录(用户名=admin,密码=admin)。
- 使用
openid-connect
作为Client Protocol
创建一个领域和一个客户端。 - 创建用户、角色并将客户端角色映射到用户。
- 假设服务器在
localhost
上,访问 http://localhost:8080/auth/realms/dev/.well-known/openid-configuration 会提供有关所有安全端点的详细信息 - http://localhost:8080/auth/realms/dev/protocol/openid-connect/token 向此 URL 发送一个包含有效详细信息的 POST 请求给 JWTtoken with.
获取KeyCloak服务器的public密钥
- 转到
Realm Settings
并单击Public key
会弹出该领域服务器的 Public 键。请参阅 this image 以获得更好的理解。 - 添加
-----BEGIN PUBLIC KEY-----
并将-----END PUBLIC KEY-----
附加到此复制的 public 密钥以在任何地方使用它来验证 JWTtoken。您 public 密钥最终应该看起来像这样:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhAj9OCZd0XjzOIad2VbUPSMoVK1X8hdD2Ad+jUXCzhZJf0RaN6B+79AW5jSgceAgyAtLXiBayLlaqSjZM6oyti9gc2M2BXzoDKLye+Tgpftd72Zreb4HpwKGpVrJ3H3Ip5DNLSD4a1ovAJ6Sahjb8z34T8c1OCnf5j70Y7i9t3y/j076XIUU4vWpAhI9LRAOkSLqDUE5L/ZdPmwTgK91Dy1fxUQ4d02Ly4MTwV2+4OaEHhIfDSvakLBeg4jLGOSxLY0y38DocYzMXe0exJXkLxqHKMznpgGrbps0TPfSK0c3q2PxQLczCD3n63HxbN8U9FPyGeMrz59PPpkwIDAQAB
-----END PUBLIC KEY-----