使用 Keycloak 保护 NestJS SwaggerUI

问题描述 投票:0回答:1

我目前正在尝试使用 NestJS 构建 RestAPI 后端。我正在使用 SwaggerUI 来测试和访问我的端点,并希望使用 keycloak 来保护这些端点。

我正在使用以下行和 Nest-keycloak-connect 将我的 Keycloak 客户端与我的项目连接:

KeycloakConnectModule.register({authServerUrl: '<URL>', realm: '<RealmName>', clientId: '<clientID>', secret: '<Secret>'});

我设置 SwaggerUI 如下:

const config = new DocumentBuilder()
  .setTitle('<Title>')
  .setDescription('Example Description')
  .setVersion('1.0')
  .build();
  const document = SwaggerModule.createDocument(app, config);

  SwaggerModule.setup('api', app, document);

现在我想知道如何在 SwaggerUI 中添加“身份验证”按钮,以便它将给定的用户名和密码作为 JWT 令牌发送到 Keycloak 并返回访问令牌,以便我可以根据给定的端点访问我的端点守卫。

我当前的问题是,据我所知,有关同时使用 NestJS 和 Keycloak 的文档相当少。我可以找到有关不使用 Keycloak 的 Swagger 和 NestJS 的帮助,或者使用 NestJS 之外的其他框架的 Swagger 和 Keycloak。

nestjs keycloak swagger-ui
1个回答
0
投票

您可以通过创建客户端(这将是您的 api)并使用“资源所有者密码凭据流程”来做到这一点 https://www.keycloak.org/docs/22.0.4/secure_apps/#_resource_owner_password_credentials_flow

创建您的客户端,然后在“客户端”>“您的客户端”>“设置”中启用客户端身份验证

然后在: 客户>“您的客户”>凭证 在客户端身份验证器上选择“客户端 ID 和密钥”

使用该信息向您的 keycloak 域发出请求,如文档中所示:

    curl \
  -d "client_id=myclient" \
  -d "client_secret=40cc097b-2a57-4c17-b36a-8fdf3fc2d578" \
  -d "username=user" \
  -d "password=password" \
  -d "grant_type=password" \
  "http://localhost:8080/realms/master/protocol/openid-connect/token"
© www.soinside.com 2019 - 2024. All rights reserved.