Section 14: Keycloak 集成 (06:24:30 - 06:30:20)
将 Keycloak 添加到 Docker Compose (06:24:30 - 06:24:30)¶
首先,我们需要将 Keycloak 添加到我们的 Docker Compose 文件中。 ⏎
打开 docker-compose.yml 文件,并添加以下服务定义:
keycloak:
image: quay.io/keycloak/keycloak:24.0.2
container_name: keycloak_ms
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
ports:
- "9098:8080"
networks:
- microservices-net
command: start-dev
docker-compose.yml 文件中已经定义了 microservices-net 网络。如果没有,请在 docker-compose.yml 文件中添加以下内容:
完成以上配置后,运行 docker-compose up -d 命令来启动 Keycloak 容器。 ⏎
设置 Keycloak (06:24:30 - 06:24:30)¶
打开浏览器,访问 http://localhost:9098,使用 admin 作为用户名和密码登录 Keycloak 管理控制台。 ⏎
- 创建 Realm (Create Realm):
- 点击左侧菜单栏的 "Realms",然后点击 "Create realm"。
- 输入 Realm 名称,例如 "microservices",然后点击 "Create"。
- 创建客户端 (Create Client):
- 在左侧菜单栏中选择你刚刚创建的 Realm("microservices")。
- 点击 "Clients",然后点击 "Create client"。
- 选择 "OpenID Connect",输入客户端 ID,例如 "microservice-api",然后点击 "Next"。
- 设置 "Client authentication" 为 "On"
- "Authentication flow" 的 "Standard flow" 和 "Direct access grant" 设置为 "Off"
- 点击 "Save"。
- 获取客户端密钥 (Get Client Secret):
- 在客户端详情页面中,点击 "Credentials" 选项卡。
- 复制客户端密钥(Client secret),稍后我们将在 API 网关的配置中使用它。
将 Keycloak 依赖项添加到 API 网关 (06:24:30 - 06:24:30)¶
现在,我们需要将 Keycloak 依赖项添加到 API 网关的 pom.xml 文件中。 ⏎
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
API 网关安全配置 (06:24:30 - 06:24:30)¶
打开 application.yml 文件,并添加以下安全配置:
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:9098/realms/microservices
确保将 http://localhost:9098/realms/microservices 替换为你的 Keycloak 服务器地址和 Realm 名称。
使用 Postman 测试安全性 (06:24:30 - 06:30:20)¶
现在,我们可以使用 Postman 来测试 API 网关的安全性。 ⏎
- 获取访问令牌 (Get Access Token):
- 在 Postman 中,创建一个新的请求,类型为
POST,URL 为http://localhost:9098/realms/microservices/protocol/openid-connect/token(替换为你的 Keycloak token endpoint 地址). - 在 "Body" 选项卡中,选择 "x-www-form-urlencoded",并添加以下参数:
client_id: 你的客户端 ID(例如,"microservice-api")。client_secret: 你的客户端密钥。grant_type:client_credentials
- 点击 "Send" 获取访问令牌。
- 在 Postman 中,创建一个新的请求,类型为
- 使用访问令牌访问 API (Access API with Access Token):
- 在 Postman 中,创建一个新的请求,类型为
GET,URL 为http://localhost:8222/api/v1/products(或者其他你想要测试的 API 端点)。 - 在 "Authorization" 选项卡中,选择 "OAuth 2.0",并将步骤 1 中获取的访问令牌粘贴到 "Token" 字段中。
- 点击 "Send"。
- 在 Postman 中,创建一个新的请求,类型为
如果配置正确,你应该能够成功访问 API,并获取到预期的数据。如果未配置,则会返回 401 Unauthorized 错误。 ⏎