Vue+Golang接入KeyCloak

Vue+Golang接入KeyCloak实现简单的角色划分、权限校验。

本人Golang苦手,也是第一次接触Keycloak。网上资料太少,我的方案大概率非最佳实践。仅供参考。欢迎批评意见。

接入预期

本次实践将达到以下几个目的:

  1. 前端Vue接入KeyCloak,必须登录后才进行渲染。
  2. 后端Golang Beego框架接入Keycloak。使用前端传过来的Authorization进行鉴权。
  3. 区分普通用户和管理员两种角色。

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的强大之处,我可能还远远没有用上。