以前写过一些使用 Keycloak 保护 Spring Boot 应用的文章,今天再从 0 开始介绍一下如何使用 Keycloak 来保护 SpringBoot 应用,但并不局限于 Keycloak,可以通过配置的方式,将 Keycloak 替换成任何兼容 OIDC 的身份认证系统。
在开始正文前,先总结一下以前的文章:
- 使用 Keycloak API 来保护 SpringBoot 应用: 《使用 Keycloak 接管 SpringBoot 应用的用户认证功能 - Jeff Tian的文章 - 知乎 》
- 自定义 Jwt Decoder 方式来保护 SpringBoot 应用,可以同时支持 Keycloak 或者其他多个 OIDC 身份提供商的令牌:《通过 Bean 的方式扩展 Spring 应用,使其同时支持多个授权服务颁发的令牌。 - Jeff Tian的文章 - 知乎 》
- 不使用第三方包,裸写 HTTP 请求调用 Keycloak 或者其他 OIDC 身份提供商的 API 来保护 SpringBoot 应用:《不使用 spring-boot-starter-oauth2-resource-server,如何使用 OIDC Server 保护 API? - Jeff Tian的文章 - 知乎 》
- 使用 Keycloak 适配器来保护 SpringBoot 应用:《Free Arch: 如何在 Spring Boot 应用中集成 Keycloak? - Jeff Tian的文章 - 知乎 》
- 使用 spring-security-oauth2 或者 spring-boot-starter-oauth2-resource-server 来保护 SpringBoot 应用开发的 API:《升级 spring-security-oauth2 到 spring-boot-starter-oauth2-resource-server - Jeff Tian的文章 - 知乎 》
今天还是用 spring-boot-starter-oauth2-resource-server,只是使用了 Web UI 的方式来创建项目,因此对新手更加友好,如果要使用命令行来创建项目脚手架,可以参考《Free Arch: 如何在 Spring Boot 应用中集成 Keycloak? - Jeff Tian的文章 - 知乎 》 中的文字版按步指引。
源代码
https://github.com/JeffTrain/protected
按步指引
创建项目脚手架代码
首先,去 https://start.spring.io/ 生成一个项目脚手架,如下图所示:
然后下载为 zip 包,如下图所示:
添加代码
接着就可以添加 controller 和 CustomWebSecurityConfigurerAdapter config 了,具体代码可以从 https://github.com/JeffTrain/protected 查看。
本地验证
然后点击 idea 启动项目,如下图所示:
然后可以用 Postman 测试一下,访问 /api/public,不需要传 token,如下图所示:
接着用 Postman 不传 token 直接访问 /api/protected,得到 401 或者 403,不能正常访问,如下图所示:
最后从 Keycloak 里登录成功的面板,打开开发者工具可以抓取到一个有效的 token,如下图所示:
使用该有效的 token 再次访问 /api/protected,成功了,如下图所示: