Spring Boot/Angular整合Keycloak实现单点登录

本文代码以Angular 8集成Spring Boot 2详解为基础,删除了原JWT、用户、权限、登录等代码。Angular代码使用了keycloak-angular,稍做修改。GitHub源码地址:heroes-api 、heroes-web 。

软件环境:
Keycloak 8.0.1
Spring Boot 2.2.2
Angular 8.2
ADFS 2016
Salesforce Cloud

Keycloak

Keycloak为现代应用和服务提供开源的认证和访问管理,即通常所说的认证和授权。Keycloak支持OpenID、OAuth 2.0和SAML 2.0协议;支持用户注册、用户管理、权限管理;支持OTP,支持代理OpenID、SAML 2.0 IDP,支持GitHub、LinkedIn等第三方登录,支持整合LDAP和Active Directory;支持自定义认证流程、自定义用户界面,支持国际化。

Keycloak支持Java、C#、Python、Android、iOS、JavaScript、Nodejs等平台或语言,提供简单易用的Adapter,仅需少量配置和代码即可实现SSO。

Keycloak新的发行版命名为Quarkus,专为GraalVM和OpenJDK HotSpot量身定制的一个Kurbernetes Native Java框架,计划2019年底正式发布。

安装

Keycloak构建在WildFly application server之上,从官网下载Standalone server distribution解压后运行bin/standalone.sh即可启动。默认使用h3数据库,可以修改配置使用其它数据库。Standalone Clustered Mode、Domain Clustered Mode启动模式和更多配置请参阅官方文档。
默认,本地网址为:8080/auth ,首次登录时必须创建admin用户:

Spring Boot/Angular整合Keycloak实现单点登录


直接登录Admin Console :8080/auth/admin/ :

Spring Boot/Angular整合Keycloak实现单点登录

Realm

Spring Boot/Angular整合Keycloak实现单点登录


为保护不同的应用,通常创建不同的Realm,各Realm间的数据和配置是独立的。初始创建的Realm为Master,Master是最高级别的Realm。Master Realm内的admin用户(授予admin角色的用户)拥有查看和管理任何其它realm的权限。因此,不推荐使用master realm管理用户和应用,而应仅供超级管理员来创建和管理realm。
每个realm有专用的管理控制台,可以设置自已的管理员账号,比如接下来我们创建的heroes realm,控制台网址为:8080/auth/admin/heroes/console 。
创建Heroes realm
点击左上角下拉菜单 -> Add realm:

Spring Boot/Angular整合Keycloak实现单点登录


Spring Boot/Angular整合Keycloak实现单点登录


Login Tab中有多个可配置选项:用户注册、编辑用户名、忘记密码、记住我、验证email、使用email登录、需要SSL。

Spring Boot/Angular整合Keycloak实现单点登录


其中,Require SSL有三个选项:all requests、external requests、none,默认为external requests,在生产环境中应配置为all requests。

all requests 所有请求都需通过HTTPS访问

external requests localhost和私有IP不需通过HTTPS访问

none 任何客户端都不需HTTPS

Themes Tab可以配置界面主题、启用国际化:

Spring Boot/Angular整合Keycloak实现单点登录


Tokens Tab可以配置token签名算法、过期时间等。

Client

Client是realm中受信任的应用。

Spring Boot/Angular整合Keycloak实现单点登录


创建realm后自动创建以下client:

account 账户管理

Spring Boot/Angular整合Keycloak实现单点登录


如Realm配置中启用了User-Managed Access则可以管理自己的Resource:

Spring Boot/Angular整合Keycloak实现单点登录

admin-cli

broker

realm-management 预置了realm管理角色,创建realm管理员时需要分配这些角色

security-admin-console realm管理控制台

创建heroes client
点击Clients右上方的Create:

Spring Boot/Angular整合Keycloak实现单点登录


Spring Boot/Angular整合Keycloak实现单点登录


Client Protocol使用默认值openid-connect。Access Type有三个选项confidential、public、bearer-only,保持默认值public。confidential需要client secret,但我们将在web应用中使用此client,web无法以安全的方式传输secret,因此必须使用public client。只要严格使用HTTPS,可以保证安全。Valid Redirect URIs输入 :4200/* 。

认证流程:

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。