1.5. 创建项目
要开始,使用以下命令创建一个新项目:
使用 Quarkus CLI:
quarkus create app org.acme:security-keycloak-authorization-quickstart \ --extension='oidc,keycloak-authorization,rest-jackson' \ --no-code cd security-keycloak-authorization-quickstart
quarkus create app org.acme:security-keycloak-authorization-quickstart \ --extension='oidc,keycloak-authorization,rest-jackson' \ --no-code cd security-keycloak-authorization-quickstart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建 Gradle 项目,请添加--
gradle or
--gradle-kotlin-dsl
选项。有关如何安装和使用 Quarkus CLI 的更多信息,请参阅 Quarkus CLI 指南。
使用 Maven:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建 Gradle 项目,请添加
-DbuildTool=gradle
or-DbuildTool=gradle-kotlin-dsl
选项。
对于 Windows 用户:
-
如果使用 cmd,(不要使用反向斜杠
\
并将所有内容放在同一行中) -
如果使用 Powershell,则双引号中的 wrap
-D
参数,如"-DprojectArtifactId=security-keycloak-authorization-quickstart"
此命令生成带有 keycloak-authorization
扩展的新项目。扩展将 Keycloak 适配器集成到您的 Quarkus 应用程序中,提供必要的功能来与 Keycloak 服务器交互并执行 bearer 令牌授权。
为现有项目添加扩展
如果您已经有一个现有的 Quarkus 项目,您可以在项目的基本目录中运行以下命令来添加 oidc
和 keycloak-authorization
扩展:
使用 Quarkus CLI:
quarkus extension add oidc,keycloak-authorization
quarkus extension add oidc,keycloak-authorization
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven:
./mvnw quarkus:add-extension -Dextensions='oidc,keycloak-authorization'
./mvnw quarkus:add-extension -Dextensions='oidc,keycloak-authorization'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle:
./gradlew addExtension --extensions='oidc,keycloak-authorization'
./gradlew addExtension --extensions='oidc,keycloak-authorization'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
这个命令在构建文件中添加以下依赖项:
使用 Maven:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle:
implementation("io.quarkus:quarkus-oidc") implementation("io.quarkus:quarkus-keycloak-authorization")
implementation("io.quarkus:quarkus-oidc") implementation("io.quarkus:quarkus-keycloak-authorization")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
实现 /api/users/me
端点
首先实施 /api/users/me
端点。以下代码定义了提供用户详情的 Jakarta REST 资源:
实现 /api/admin
端点
接下来,定义 /api/admin
端点。以下代码代表了使用身份验证保护的简单 Jakarta REST 资源:
使用 Keycloak 的基于角色的访问控制
请注意,没有定义 @RolesAllowed
等显式注释来强制执行资源的访问控制。相反,keycloak-authorization
扩展会动态映射 Keycloak 中受保护的资源的 URI。
访问控制管理如下:
- Keycloak 根据每个请求的策略评估权限。
- 扩展强制执行这些权限,根据 Keycloak 中定义的角色或策略授予或拒绝访问。
这会把访问控制逻辑与应用程序代码分离,从而更轻松地在 Keycloak 中管理和更新访问策略。