keycloak mysql_Demo of keycloak & mysql in docker

安装 & 启动Docker环境

下载keycloak镜像

docker pull jboss/keycloak

下载Mysql镜像

注意这里如果直接用 latest 会下载到 mysql8 镜像,mysql8和最新版的keycloak集成会报一个“MySQLSyntaxErrorException: Row size too large”的错误,详情请见 这里 。因此指定 mysql 5.7 版本:

docker pull mysql:5.7

创建网络环境

docker network create key-cloak

启动Mysql实例

docker run --name mysql -d --net keycloak-network -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=password -e MYSQL_ROOT_PASSWORD=root_password mysql:5.7

启动Keycloak

docker run --name keycloak -d -p 443:443 -p 8080:8080 -p 9990:9990 --net keycloak-network jboss/keycloak

配置Keycloak

允许局域网IP访问

docker exec -it keycloak bash

vi keycloak/standalone/configuration/standalone.xml

在 interfaces 节点添加 any 子节点,并将socket-binding-group的默认interface改为 any:

offset="${jboss.socket.binding.port-offset:0}">

……

增加admin账号

./keycloak/bin/add-user-keycloak.sh -r master-u landas -p …

记得重启容器使得配置生效!

验证身份并关闭SSL

./keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user landas

./keycloak/bin/kcadm.sh update realms/master -s sslRequired=NONE

设置User、Client、Resource

使用刚设置的 admin 账号登录控制台 http://${虚拟机IP}:8080

依次创建Realm/Clients/Role/User,详细步骤参见 这里。注意在client中要正确填写后面Java项目实际运行的机器局域网IP。

创建需要授权的项目

简单起见,直接用springboot,在建工程的时候勾选 themeleaf 及 keycloak。 build.gradle文件如下:

buildscript {

ext {

springBootVersion = '2.0.6.RELEASE'

}

repositories {

maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'}

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

}

}

apply plugin: 'java'

apply plugin: 'idea'

apply plugin: 'org.springframework.boot'

apply plugin: 'io.spring.dependency-management'

group = 'com.landas'

version = '1.0'

sourceCompatibility = 1.8

repositories {

maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'}

}

ext {

keycloakVersion = '4.5.0.Final'

}

dependencies {

implementation('org.keycloak:keycloak-spring-boot-starter')

implementation('org.springframework.boot:spring-boot-starter-thymeleaf')

implementation('com.google.guava:guava:19.0')

testImplementation('org.springframework.boot:spring-boot-starter-test')

}

dependencyManagement {

imports {

mavenBom "org.keycloak.bom:keycloak-adapter-bom:${keycloakVersion}"

}

}

项目的application.properties配置如下,其中192.128.192.128是虚拟机局域网IP。realm、resource、role 都是上面步骤中在keycloak控制台配置的名称,patterns是需要使用keycloak授权的接口URL:

keycloak.auth-server-url=http://192.168.192.128:8080/auth

keycloak.realm=keycloak_test

keycloak.resource=keycloak_testclient_1

keycloak.public-client=true

keycloak.security-constraints[0].authRoles[0]=keycloak_test_role1

keycloak.security-constraints[0].securityCollections[0].patterns[0]=/customers/*

Controller主要方法如下:

@GetMapping(path = "/")

public String index() {

return "external";

}

@GetMapping(path = "/customers")

public String customers(Principal principal, Model model) {

model.addAttribute("customers", generateCustomers());

model.addAttribute("username", principal.getName());

return "customers";

}

启动项目,登录 http://{ip}:{port},登入external。注意这里的 ip 不能使localhost,而必须是项目运行机器的局域网IP,keycloak将用此 IP 重定向。

点击customers链接,输入用户名密码,可见customers页面已通过 keycloak 验证。

DEMO 至此成功完成。

备注:项目启动前记得将虚拟机时区设置为中国区(CST),并使用ntpupdate同步时间,否则可能会报invalid token错误。具体错误请见 keycloak-user 邮件列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值