# gkeyauth **Repository Path**: wgq11225/gkeyauth ## Basic Information - **Project Name**: gkeyauth - **Description**: 用户中心 --- > 学习keyauth-g7 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-11 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gkeyauth 用户中心 ## Mongodb 1. 如何连接MongoDB, 以及MongoDB的配置 2. 基于MongoDB的 CRUD + bson struct tag: 用于MongoDB 保存时,完成Object -> + "_id": 内置的BSON TAG, 类似于MySQL主键, _: 代表的倒序索引, 不用额外多创建一个Index, 最好沿用 + 通过DB对象的Collection对象来 进行CRUD操作 + ## 对接注册中心 注册中心使用的mcenter服务: https://github.com/infraboard/mcenter 主题: 服务发现 + 服务注册 1. 添加注册中心的配置 2. 然后初始化全局的 注册中心客户端实例 rpc.C() 3. GRPC 服务启动时 调用 注册中心的客户端把 当前GPRC监听的地址注册过期 4. 当GRPC服务Stop时, 注销注册中心的实例 + 服务解索(GRPC Client) 1. 通过GRPC 的NamedResolver 来进行服务的发现 2. 也是加载 注册中心 的 GRPC客户端: rpc.C() --? , 因为 Mcenter 提供的Resolver需要依赖 注册中心的客户端来进行 服务实例的搜索 3. 在服务启动的时候 初始化的时候 就完成以上步骤 4. GRPC客户端 配置注册中心的访问凭证, 已经需要访问的服务的名称, Resovler就能完成服务名称--》 地址的解析 准备完成 Keyauth的客户端, CMDB 就可以通过该客户端来和Keyauth进行交互 ```go // keyauth 客户端 // 需要配置注册中心的地址 // 获取注册中心的客户端,使用注册中心的客户端 查询 keyauth的地址 func TestBookQuery(t *testing.T) { should := assert.New(t) conf := mcenter.NewDefaultConfig() conf.Address = os.Getenv("MCENTER_ADDRESS") conf.ClientID = os.Getenv("MCENTER_CDMB_CLINET_ID") conf.ClientSecret = os.Getenv("MCENTER_CMDB_CLIENT_SECRET") // 把Mcenter的配置传递给Keyauth的客户端 c, err := rpc.NewClient(conf) // 使用SDK 调用Keyauth进行 凭证的校验 // c.Token().ValidateToken() if should.NoError(err) { resp, err := c.Token().ValidateToken( context.Background(), token.NewValidateTokenRequest("yTGTAj3fnPWqXIEkuicr57bf1"), ) should.NoError(err) fmt.Println(resp) } } ``` cmdb 如何使用Keyauth的客户端进行 Token的校验, 需要一个HTTP 的 认证中间件: 因为Keyauth是用户中心, HTTP的权限中间件需要和keyauth交互, 依赖Keyatuh的SDK, 因此这个中间件有 keyauth提供 # 查看所有包的依赖关系 ```shell go mod why -m all ``` # 查看指定包依赖 ```bash go mod why -m gopkg.in/yaml.v2 ``` ## Mongodb 1. 如何连接MongoDB, 以及MongoDB的配置 2. 基于MongoDB的 CRUD + bson struct tag: 用于MongoDB 保存时,完成Object -> + "_id": 内置的BSON TAG, 类似于MySQL主键, _: 代表的倒序索引, 不用额外多创建一个Index, 最好沿用 + 通过DB对象的Collection对象来 进行CRUD操作 + ## 对接注册中心 注册中心使用的mcenter服务: https://github.com/infraboard/mcenter 1. 如何把keyauth 服务注册到注册中心, cmd/start.go ```shell [mongo] endpoints = ["192.168.183.135:27017"] username = "mcenter" password = "123456" database = "mcenter" ``` ### 学习tag推荐 1. 刚开始tag为v0.0.5 + 配置MongoDB ```shell use mcenter db.createUser({user: "mcenter", pwd: "123456", roles: [{ role: "dbOwner", db: "mcenter" }]}) ``` + 初始化内置服务 ```shell $ make init 2025-03-25T20:42:48.810+0800 INFO [INIT] cmd/start.go:153 log level: debug 2025-03-25T20:42:48.825+0800 INFO [init] cmd/init.go:50 init app keyauth success, client_id: s4tUtWs3cUyjeleme4Z89Y8f, client_secret: pzurqtSxlYgezFD66Oi6bUcH1I68VRmd 2025-03-25T20:42:48.826+0800 INFO [init] cmd/init.go:50 init app maudit success, client_id: gc53trR8K8z2YRKRKnOf9Y8Q, client_secret: kai3tJJPJoD9osvNK7PEaDlOBGqJs2Nl 2025-03-25T20:42:48.827+0800 INFO [init] cmd/init.go:50 init app cmdb success, client_id: xViFsbDKQF6jTB48aTyqxbxH, client_secret: Xm4njJTL4rkUB182bhhJpL0BgeVCus7S ``` 2. 3. 4. 5. ## 架构图 ## 项目说明 ``` ├── protocol # 脚手架功能: rpc / http 功能加载 │ ├── grpc.go │ └── http.go ├── client # 脚手架功能: grpc 客户端实现 │ ├── client.go │ └── config.go ├── cmd # 脚手架功能: 处理程序启停参数,加载系统配置文件 │ ├── root.go │ └── start.go ├── conf # 脚手架功能: 配置文件加载 │ ├── config.go # 配置文件定义 │ ├── load.go # 不同的配置加载方式 │ └── log.go # 日志配置文件 ├── dist # 脚手架功能: 构建产物 ├── etc # 配置文件 │ ├── xxx.env │ └── xxx.toml ├── apps # 具体业务场景的领域包 │ ├── all │ │ |-- grpc.go # 注册所有GRPC服务模块, 暴露给框架GRPC服务器加载, 注意 导入有先后顺序。 │ │ |-- http.go # 注册所有HTTP服务模块, 暴露给框架HTTP服务器加载。 │ │ └── internal.go # 注册所有内部服务模块, 无须对外暴露的服务, 用于内部依赖。 │ ├── book # 具体业务场景领域服务 book │ │ ├── http # http │ │ │ ├── book.go # book 服务的http方法实现,请求参数处理、权限处理、数据响应等 │ │ │ └── http.go # 领域模块内的 http 路由处理,向系统层注册http服务 │ │ ├── impl # rpc │ │ │ ├── book.go # book 服务的rpc方法实现,请求参数处理、权限处理、数据响应等 │ │ │ └── impl.go # 领域模块内的 rpc 服务注册 ,向系统层注册rpc服务 │ │ ├── pb # protobuf 定义 │ │ │ └── book.proto # book proto 定义文件 │ │ ├── app.go # book app 只定义扩展 │ │ ├── book.pb.go # protobuf 生成的文件 │ │ └── book_grpc.pb.go # pb/book.proto 生成方法定义 ├── version # 程序版本信息 │ └── version.go ├── README.md ├── main.go # Go程序唯一入口 ├── Makefile # make 命令定义 └── go.mod # go mod 依赖定义 ``` ## 快速开发 make脚手架 ```sh ➜ gkeyauth git:(master) ✗ make help dep Get the dependencies lint Lint Golang files vet Run go vet test Run unittests test-coverage Run tests with coverage build Local build linux Linux build run Run Server clean Remove previous build help Display this help screen ``` 1. 使用安装依赖的Protobuf库(文件) ```sh # 把依赖的probuf文件复制到/usr/local/include # 创建protobuf文件目录 $ make -pv /usr/local/include/github.com/infraboard/mcube/pb # 找到最新的mcube protobuf文件 $ ls `go env GOPATH`/pkg/mod/github.com/infraboard/ # 复制到/usr/local/include $ cp -rf pb /usr/local/include/github.com/infraboard/mcube/pb ``` 2. 添加配置文件(默认读取位置: etc/gkeyauth.toml) ```sh $ 编辑样例配置文件 etc/gkeyauth.toml.book $ mv etc/gkeyauth.toml.book etc/gkeyauth.toml ``` 3. 启动服务 ```sh # 编译protobuf文件, 生成代码 $ make gen # 如果是MySQL, 执行SQL语句(docs/schema/tables.sql) $ make init # 下载项目的依赖 $ make dep # 运行程序 $ make run ``` 4. 生成grpc.pb.go文件版本对应关系 ```go go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 ==> grpc.SupportPackageIsVersion7 ==> protoc v3.20.3 ==> grpc v1.46.2 // go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.4.0 ==> grpc.SupportPackageIsVersion8 // go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.5.0 ==> grpc.SupportPackageIsVersion9 `` ## 相关文档 ```shell # 课件 https://gitee.com/wgq11225/go-course/blob/master/day17/user.md https://gitee.com/infraboard/go-course/blob/master/day17/user.md ``` ## mongod 创建用户名和密码 ```shell # 1. 设置mongodb密码 [root@k8s-129 ~]# mongo MongoDB shell version v4.4.29 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("a6878e7a-3e7d-408c-9f51-97b66093373c") } MongoDB server version: 4.4.29 --- The server generated these startup warnings when booting: 2025-03-07T21:26:20.060+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted 2025-03-07T21:26:20.060+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' --- > use admin switched to db admin > show dbs; admin 0.000GB config 0.000GB local 0.000GB > db.createUser({user:"admin",pwd:"123456",roles:["root"]}) Successfully added user: { "user" : "admin", "roles" : [ "root" ] } > db.auth("admin", "123456") 1 > use keyauth switched to db keyauth > db.createUser({user: "keyauth", pwd: "123456", roles: [{ role: "dbOwner", db: "keyauth" }]}) Successfully added user: { "user" : "keyauth", "roles" : [ { "role" : "dbOwner", "db" : "keyauth" } ] } > db.auth("keyauth", "123456") 1 > quit() # 2. mongod开启认证 编辑 /etc/mongod.conf 开启认证访问(可选), 开启后要重启下服务 security: authorization: enabled # 3. 重启mongodb进程生效认证配置 [root@k8s-129 ~]# systemctl restart mongod ``` ## 提交记录 ```shell $ git log commit 0bcff8f303ba7cab19aac768629d7caad52ec4c1 (HEAD -> master, origin/master, origin/HEAD) ------ ?(未测试redis缓存, 需要注意redis版本) Author: yumaojun03 <18108053819@163.com> Date: Sun Jul 17 20:36:21 2022 +0800 添加redis缓存 commit 93db1af97d839f513b4ab5bc9752d2e8b57109c9 (tag: v0.0.8) ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 18:04:21 2022 +0800 补充审计 commit 1c66734bed751e78f886de5ca6ff8ca268e37b76 ------ ? rpc/client sdk客户端增加审计日志功能, 审计需要在认证和鉴权通过后才实施审计 Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 18:02:06 2022 +0800 add audit log commit be27b320c8d3d8e9a07bed840c60b1295d7ac4d2 (tag: v0.0.7) ------ 增加审计模块 ? #Who When What Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 17:32:45 2022 +0800 审计功能 commit 7ce5390aa77b224e2db6b989be3bd1ff8165dace ------ 创建超级管理员权限,允许访问所有资源 Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 17:12:05 2022 +0800 add allow all commit eb73c87c5fc608b82422cb8992e49e9d9e2d512a (tag: v0.0.6) ------ 打tagv0.0.6 cmdb需要同步升级gkeyauth sdk客户端 Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 16:29:57 2022 +0800 中间件支持鉴权 commit 8adc7faeea4e339e7ee20cf8794303a60c45fde9 ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 16:24:23 2022 +0800 中间件添加权限校验 commit e2530ec2fa92e4134359b52ccec3e7201576f445 (tag: v0.0.5) ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 16:11:04 2022 +0800 添加角色校验 commit 4bfe0a039e18d9a8e1a2ca5988c78fc529b233ad ------ role_name---> resource, action Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 12:16:35 2022 +0800 添加鉴权定义 commit 05bea8bc46eba9903f7cbbb9bd0fd0e9b1ed9fdb (tag: v0.0.4) ------ 增加版本v0.0.4 Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 18 11:22:16 2022 +0800 add endpoint commit 38000fb37e06eec93051b691140f707716324981 (tag: v0.0.3) ------ 增加版本v0.0.3 Author: yumaojun03 <18108053819@163.com> Date: Sun Jun 12 21:17:08 2022 +0800 init logger commit 2c0fc5823cf05f5acc3d592543a89cfef50e8c0d (tag: v0.0.2) ------ 增加版本v0.0.2 Author: yumaojun03 <18108053819@163.com> Date: Sun Jun 12 21:09:11 2022 +0800 添加Auth Lable 支持 commit b05f3846391bd980bc4611cd96faa662fc0e635d ------ Author: yumaojun03 <18108053819@163.com> Date: Sun Jun 12 20:30:52 2022 +0800 auth test ok commit 5bfce709d1b7b2c45f26728d0de319171ba7d572 (tag: v0.0.1) ------ mcenter v0.0.5 cmdb Author: yumaojun03 <18108053819@163.com> Date: Sun Jun 12 19:50:50 2022 +0800 # 客户端是有版本概念 git tag git tag v0.0.1 git push --tags add client readme commit 9ea58135c5d19d77c820ac5f9dc14a5dd7a2af6d ------ Author: yumaojun03 <18108053819@163.com> Date: Sun Jun 12 19:49:27 2022 +0800 添加认证中间件 commit d33993de85a0d6b69ba4913caef888c6476bdfc4 ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 22:56:15 2022 +0800 补充auth中间件框架 commit ee4d9b52475d50f9352c13a7cd36297e4b69a62e ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 19:01:14 2022 +0800 补充keyauth客户端 commit 3357ae500e5931c4d2e2011b4f49c7f86580b772 ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 18:16:53 2022 +0800 对接注册中心 # 主题: 服务发现 --> 对接注册中心 + 服务注册(GRPC Server-->Mcenter) 1. 添加注册中心的配置地址 2. 然后初始化全局的注册中心实例 rpc.C() 3. GRPC 服务启动时,调用注册中心的客户端 把当前GRPC监听的地址注册到Mcenter里面去 4. 当GRPC服务stop时候, 注销注册中心的实例 + 服务检索(GRPC client执行) 1. 通过GRPC的NamedResolver 来进行服务的发现 2. 也是加载注册中心的GRPC客户端: rpc.C() --> ?, 因为 Mcenter 提供的Resolver需要依赖注册中心的客户端进行 服务实例 的搜索 3. 在服务器启动的时候, 初始化的时候 就完成以上步骤 4. GRPC客户端配置注册中心的访问凭证, 已经需要访问的服务的名称, Resovler就能完成服务地址的解析 commit 39248d93368d0de9cccabed5b66f1c4aae3d5f06 ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 16:20:02 2022 +0800 完成Token接口 commit 4ed91a37da3449a2e68885247b7c3dfcfcce6f94 ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 15:12:02 2022 +0800 颁发Token commit d514f636817c3fd2359b04c237da59d8f4dab69e ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 11:57:00 2022 +0800 添加user模块 commit db1b157e1281df6dba6009f16bf109c8f4ccaeb6 ------ Merge: eb69c10 43edebe Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 10:15:53 2022 +0800 Merge branch 'master' of https://gitee.com/go-course/keyauth-g7 commit eb69c10b8cf00b77cd7f66e9170c00b047ab772b ------ Author: yumaojun03 <18108053819@163.com> Date: Sat Jun 11 10:15:43 2022 +0800 mongoDB CURD解读 commit 43edebec571c8cbeac9177f59976ea9f17c41671 ------ Author: Admin <18108053819@163.com> Date: Sun May 29 13:26:15 2022 +0000 add LICENSE. commit 9cfd09298768da829876a894484e48032c31ac5e Author: yumaojun03 <18108053819@163.com> Date: Sun May 29 21:24:21 2022 +0800 add keyauth init ```