后端服务器有一个端点,它在 ping 时提供 JSON 响应,并受 Apigee Edge 代理 保护。目前,此端点没有安全性,我们希望为所有发出请求的客户端实施仅承载令牌身份验证。 所有向 API 发出请求的客户端都将在授权承载中发送 JWT 令牌,Apigee Edge 将用于验证 JWT 令牌。
如何使用 Keycloak 生成此 JWT 令牌?
此外,Apigee 需要JWT 令牌来源的公钥(签署 JWT 令牌的服务器,在本例中,我相信是 Keycloak)。 所以我的第二个疑问是,当我使用 Keycloak 生成 JWT 令牌时,如何获取服务器用来验证令牌是否有效的公钥?
这是在这篇中等文章的帮助下弄清楚的。我在下面提到的所有步骤在文章中都有详细的描述(令牌部分请参阅步骤 1 到 9,其他步骤与 Spring Boot 应用程序相关),但我想概述一下我的问题中提到的那些步骤。
openid-connect
作为 Client Protocol
。localhost
,访问 http://localhost:8080/auth/realms/dev/.well-known/openid-configuration 会提供有关所有安全端点的详细信息Realm Settings
并单击 Public key
会弹出该领域服务器的公钥。请参阅此图片以更好地理解。 -----BEGIN PUBLIC KEY-----
并将 -----END PUBLIC KEY-----
附加到此复制的公钥中,以便在任何地方使用它来验证 JWTtoken。你的公钥最终应该看起来像这样:-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhAj9OCZd0XjzOIad2VbUPSMoVK1X8hdD2Ad+jUXCzhZJf0RaN6B+79AW5jSgceAgyAtLXiBayLlaqSjZM6oyti9gc2M2BXzoDKLye+Tgpftd72Zreb4HpwKGpVrJ3H3Ip5DNLSD4a1ovAJ6Sahjb8z34T8c1OCnf5j70Y7i9t3y/j076XIUU4vWpAhI9LRAOkSLqDUE5L/ZdPmwTgK91Dy1fxUQ4d02Ly4MTwV2+4OaEHhIfDSvakLBeg4jLGOSxLY0y38DocYzMXe0exJXkLxqHKMznpgGrbps0TPfSK0c3q2PxQLczCD3n63HxbN8U9FPyGeMrz59PPpkwIDAQAB
-----END PUBLIC KEY-----
keycloak 23 更新
您可以使用
docker-compose.yml
使用docker compose up
安装它:
networks:
keycloak-network:
external: true
services:
postgres:
container_name: backend-postgres
image: postgres:15.6-alpine
volumes:
- ./postgres:/var/lib/postgresql/data
- ./00_create_db.sql:/docker-entrypoint-initdb.d/create-db.sql
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
networks:
- default
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "postgres" ]
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
restart: unless-stopped
keycloak:
container_name: backend-keycloak
image: bitnami/keycloak:23.0.6
environment:
KEYCLOAK_DATABASE_VENDOR: postgresql
KEYCLOAK_DATABASE_HOST: postgres
KEYCLOAK_DATABASE_PORT: 5432
KEYCLOAK_DATABASE_NAME: keycloak
KEYCLOAK_DATABASE_USER: postgres
KEYCLOAK_DATABASE_PASSWORD: postgres
KEYCLOAK_DATABASE_SCHEMA: public
KEYCLOAK_ADMIN_USER: keycloak
KEYCLOAK_ADMIN_PASSWORD: keycloak
KC_HTTP_ENABLED: 'true'
links:
- postgres
ports:
- 8080:8080
networks:
- default
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
00_create_db.sql
:
CREATE DATABASE keycloak;
然后打开 http://localhost:8080/admin 并使用
keycloak:keycloak
登录。
选择 OpenID Connect 作为
Client type
。
现在您可以获得:
Client authentication
):curl -X POST 'http://localhost:8080/realms/<REALM>/protocol/openid-connect/token' -H 'Content-Type: application/x-www-form-urlencoded' -d 'client_id=<CLIENT_ID>' -d 'username=<USER>' -d 'password=<PASS>' -d 'grant_type=password' -d 'scope=email profile
Client authentication
):curl -X POST 'http://localhost:8080/realms/<REALM>/protocol/openid-connect/token' -H 'Content-Type: application/x-www-form-urlencoded' -d 'client_id=<CLIENT_ID>' -d 'username=<USER>' -d 'password=<PASS>' -d 'grant_type=password' -d 'scope=email profile -d 'client_secret=<CLIENT_SECRET>'