Vue+Golang接入KeyCloak
Vue+Golang接入KeyCloak实现简单的角色划分、权限校验。
本人Golang苦手,也是第一次接触Keycloak。网上资料太少,我的方案大概率非最佳实践。仅供参考。欢迎批评意见。
接入预期
本次实践将达到以下几个目的:
- 前端Vue接入KeyCloak,必须登录后才进行渲染。
- 后端Golang Beego框架接入Keycloak。使用前端传过来的Authorization进行鉴权。
- 区分普通用户和管理员两种角色。
KeyCloak搭建、配置
最方便的搭建方式当然就是用Docker了。
docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2
demodemo-front*demo-backconfidentialCredentialsService Account Rolesrealm-managementquery-usersdemo_user_roledemo_admin_roledemo-userdemo-admin
Vue接入
VUE的接入文章还是挺多的。这里简略过一下。
安装导入vue-keycloak-js
Golang接入
gocloak
初始化Client
confidentialdemo-back
初始化代码如下:
声明用户类型常量,维护client需要的相关变量并提供刷新(登录)函数。
models/user.go
路由鉴权
为api接口增加鉴权,获取Authorization Header中的AccessToken,并发送给Keycloak,获取用户的基本信息,主要是Sub(即用户id)。
再遍历User的Role信息,确定用户角色。
filter/auth.go
具体实现
获取用户信息和获取用户角色的实现如下。代码可根据业务进行调整。
models/user.go
维护client的JWT Token的任务,我直接写到获取用户角色这里了。我这里测试,获取用户基础信息的话,是不需要client的Access Token的。
后记
目前的实现是能满足我的业务需求呢,但keycloak的强大之处,我可能还远远没有用上。