我们在上一篇文章中尝试了keycloak,手动创建了一个名为felord.cn的realm,并在realm下创建了一个名为felord的用户。今天就来试试对应的SpringBootAdapter,看看keycloak是如何保护SpringBoot应用的。关注并star码农小胖??哥,第一时间获取相关干货文章。客户端相信很多同学都用过微信开放平台和蚂蚁开放平台。首先,我们需要在这些开放平台上注册一个客户端,以获得一组凭证,如用户名和密码。有的叫做appid和secret;有些被称为clientid和secret,这两个意思是一样的。其实keycloak也是类似的,也是需要在对应的realm注册一个client。下图不仅清晰的说明了keycloak中Masterrealm和customrealm的关系,也说明了一个realm中users和clients的关系。Realm、client、用户关系图我们需要在felord.cn的realm中创建一个client:Createaclientintherealm客户端创建完成后,你会发现felord.cn中多了一个client:领域。您可以通过http://localhost:8011/auth/realms/felord.cn/account/登录创建的用户。然后我们编辑配置客户端spring-boot-client:填写重定向URL进行测试,这里我只填写设置选项卡中唯一必填项,有效重定向URI,这个选项表示客户端springboot-的所有API客户端受权限控制。基于角色的访问控制是目前主流的访问控制思想,keycloak也采用了这种方式。我们需要创建一个角色并将其授予上一篇文章中创建的用户felord。让我们创建一个简单的角色:在keycloak中创建一个角色keycloak的角色非常强大。在接下来的系列文章中,胖哥将和大家一起深入学习这个概念。将角色映射到用户,然后我们将上面创建的角色base_user分配给用户felord:将角色分配给领域中的用户。到这里用户、角色、角色映射都搞定了,剩下的就是在客户端定义资源了。获取并刷新JWT我们可以通过以下方式获取用户登录的JWT对:POST/auth/realms/felord.cn/protocol/openid-connect/tokenHTTP/1.1Host:localhost:8011Content-Type:application/x-www-form-urlencodedclient_id=springboot-client&username=felord&password=123456&grant_type=password会得到:{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiS省略","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAi省略","token_type":"Bearer","not-before-policy":0,"session_state":"2fc7e289-c86f-4f6f-b4d3-1183a9518acc","scope":"profileemail"}刷新Token,只需要把refresh_token和grant_type改成refresh_token来刷新Token。以下是请求刷新的消息:POST/auth/realms/felord.cn/protocol/openid-connect/tokenHTTP/1.1Host:localhost:8011Content-Type:application/x-www-form-urlencodedclient_id=springboot-client&grant_type=refresh_token&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlYWE2MThhMC05Y2UzLTQxZWMtOTZjYy04MGQ5ODVkZjJjMTIifQ.eyJleHAiOjE2MjU3NjI4ODYsImlhdCI6MTYyNTc2MTA4NiwianRpIjoiZjc2MjVmZmEtZWU3YS00MjZmLWIwYmQtOTM3MmZiM2Q4NDA5IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDExL2F1dGgvcmVhbG1zL2ZlbG9yZC5jbiIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAxMS9hdXRoL3JlYWxtcy9mZWxvcmQuY24iLCJzdWIiOiI0YzFmNWRiNS04MjU0LTQ4ZDMtYTRkYS0wY2FhZTMyOTk0OTAiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoic3ByaW5nYm9vdC1jbGllbnQiLCJzZXNzaW9uX3N0YXRlIjoiZDU2NmU0ODMtYzc5MS00OTliLTg2M2ItODczY2YyNjMwYWFmIiwic2NvcGUiOiJwcm9maWxlIGVtYWlsIn0.P4vWwyfGubSt182P-vcyMdKvJfvwKYr1nUlOYBWzQks注意:两个请求的content-type都是application/x-www-form-urlencodedSpringBoot客户端建一个很传统的SpringBoot应用,别忘了带上SpringMVC模块,然后加入keycloak'sstarter:
