SpringBoot整合Keycloak实现单点登录

Keycloak是一个开源的身份和权限访问管理工具,轻松为应用程序和安全服务添加身份验证,无需处理储存用户或者验证用户,其提供用户联合、强健的身份验证、用户管理和细粒度授权等功能。

1. 搭建Keycloak服务器

本文使用docker compose安装keycloak,因为keycloak依赖数据库,在安装keycloak之前需要先安装数据库,本文使用mysql,具体的compose配置如下:

version: '3.7'
services:
  mysql:
    container_name: mysql
    image: mysql:latest
    restart: unless-stopped
    command: --lower_case_table_names=1 --sql-mode=""
    ports:
      - 3306:3306
    volumes:
      - ./db-init:/docker-entrypoint-initdb.d
      - ./data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  keycloak:
    container_name: keycloak
    image: jboss/keycloak:latest
    restart: unless-stopped
    depends_on:
      - mysql
    environment:
      DB_VENDOR: mysql
      DB_USER: root
      DB_PASSWORD: 123456
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: 123456
    ports:
      - 8080:8080

依次执行命令docker-compose up mysql和docker-compose up keycloak
SpringBoot整合Keycloak实现单点登录_第1张图片
SpringBoot整合Keycloak实现单点登录_第2张图片

2. 配置权限

2.1. 登陆

在浏览器输入地址:http://localhost:8080,出现如下界面
SpringBoot整合Keycloak实现单点登录_第3张图片
点击Administration Console,进入登录界面
SpringBoot整合Keycloak实现单点登录_第4张图片
输入用户名和密码:admin/123456,进入首页

2.2. 创建Realm

鼠标放在下图箭头所指处,会弹出Add realm选项
SpringBoot整合Keycloak实现单点登录_第5张图片
点击Add realm进入配置页面,输入realm名称,点击Create
SpringBoot整合Keycloak实现单点登录_第6张图片
配置重定向地址
SpringBoot整合Keycloak实现单点登录_第7张图片

2.3. 创建用户

点击左侧Users选项,进入用户创建页面
SpringBoot整合Keycloak实现单点登录_第8张图片
点击Add user,进入创建用户,输入用户名称
SpringBoot整合Keycloak实现单点登录_第9张图片
点击保存,选择Credentials配置密码
SpringBoot整合Keycloak实现单点登录_第10张图片

2.4. 创建客户端

点击左侧Clients选项,点击Create
SpringBoot整合Keycloak实现单点登录_第11张图片
输入Client ID名称,点击保存
SpringBoot整合Keycloak实现单点登录_第12张图片

2.5. 创建角色

在左侧菜单栏选择Roles
SpringBoot整合Keycloak实现单点登录_第13张图片
点击Add Role
SpringBoot整合Keycloak实现单点登录_第14张图片

2.6. 配置用户角色关系

SpringBoot整合Keycloak实现单点登录_第15张图片

2.7. 配置客户端和角色关系

选择左侧菜单项Clients,配置Client和角色的关系
SpringBoot整合Keycloak实现单点登录_第16张图片

3. 整合SpringBoot

3.1. 引入核心依赖

<dependencies>
	<dependency>
	    <groupId>org.springframework.bootgroupId>
	    <artifactId>spring-boot-starter-webartifactId>
	dependency>
	<dependency>
	    <groupId>org.keycloakgroupId>
	    <artifactId>keycloak-spring-boot-starterartifactId>
	    <version>17.0.0version>
	dependency>
<dependencies/>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.keycloak.bomgroupId>
            <artifactId>keycloak-adapter-bomartifactId>
            <version>17.0.0version>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>

3.2. 编写Controller

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/world")
    public String hello() {
        return "Hello World";
    }
}

3.3. 编写application.yml

server:
  port: 8139
spring:
  application:
    name: springboot-keycloak
keycloak:
  realm: springboot-keycloak #客户端所在的realm
  auth-server-url: http://localhost:8080/auth #keycloak授权服务器地址
  resource: sb-keycloak #客户端名称
  public-client: true #声明为一个公开的客户端
  security-constraints:
    - auth-roles:
        - sk-role
      security-collections:
        - name: hello
          patterns:
            - '/hello/world'

更多有关SpringBoot整合Keycloak的相关资料,请参阅Keycloak官网文档

4. 验证

启动SpringBoot项目,在浏览器输入地址http://localhost:8139/hello/world,会重定向到keycloak登陆页面,如下图所示:
SpringBoot整合Keycloak实现单点登录_第17张图片
输入用户名和密码:sk-admin/123456
SpringBoot整合Keycloak实现单点登录_第18张图片

你可能感兴趣的:(SpringBoot,keycloak,单点登陆)