帶你十天輕松搞定 Go 微服務系列(七)
序言
我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
環(huán)境搭建:帶你十天輕松搞定 Go 微服務系列(一) 服務拆分:帶你十天輕松搞定 Go 微服務系列(二) 用戶服務:帶你十天輕松搞定 Go 微服務系列(三) 產品服務:帶你十天輕松搞定 Go 微服務系列(四) 訂單服務:帶你十天輕松搞定 Go 微服務系列(五) 支付服務:帶你十天輕松搞定 Go 微服務系列(六) RPC 服務 Auth 驗證(本文) 服務監(jiān)控 鏈路追蹤 分布式事務
期望通過本系列帶你在本機利用 Docker 環(huán)境利用 go-zero 快速開發(fā)一個商城系統(tǒng),讓你快速上手微服務。
完整示例代碼:https://github.com/nivin-studio/go-zero-mall
首先,我們來看一下整體的服務拆分圖:

7 RPC服務 Auth 驗證
在前面幾章我們已經分別實現(xiàn)了 user product order pay 的 rpc 服務和 api 服務。在 api 服務中我們使用 go-zero 框架自帶的 jwt 實現(xiàn)鑒權驗證。那么接下里我們就說說 rpc 服務的 auth 驗證。
go-zero 框架 rpc 服務的 auth 驗證原理是,客戶端訪問 rpc 服務需要攜帶 App 標識以及 Token 值,rpc 服務會從指定的 Redis 服務中驗證 App 標識和 Token 值是否正確。所以客戶端的 App 標識,Token 值,是需要提前打入 Redis 服務中。
7.1 開啟 rpc 服務 auth 驗證
下面我們以 user rpc 服務,和 user api 服務為例,來開啟并使用 rpc 服務的 auth 驗證
進入服務工作區(qū)
$?cd?mall/service/user
修改 user rpcuser.yaml 配置文件
$?vim?rpc/etc/user.yaml
Name:?user.rpc
ListenOn:?0.0.0.0:9000
...
Auth:?true???????????????#?是否開啟?Auth?驗證
StrictControl:?true??????#?是否開啟嚴格模式
Redis:???????????????????#?指定?Redis?服務
??Key:?rpc:auth:user?????#?指定?Key?應為?hash?類型
??Host:?redis:6379
??Type:?node
??Pass:
修改 user apiuser.yaml 配置文件
$?vim?api/etc/user.yaml
Name:?User
Host:?0.0.0.0
Port:?8000
...
UserRpc:
??App:?userapi??????????????????????????#?App?標識
??Token:?6jKNZbEpYGeUMAifz10gOnmoty3TV??#?Token?值
??Etcd:
????Hosts:
????-?etcd:2379
????Key:?user.rpc
將
App標識,Token值寫入Redis服務App標識作為rpc指定key的hash key,Token值作為hash key的值。

重啟 user rpc 服務
$?cd?mall/service/user/rpc
$?go?run?user.go?-f?etc/user.yaml
Starting?rpc?server?at?127.0.0.1:9000...
重啟 user api 服務
$?cd?mall/service/user/api
$?go?run?user.go?-f?etc/user.yaml
Starting?server?at?0.0.0.0:8000...
7.2 調試 rpc 服務 auth 驗證
訪問 user api 的 login 接口,我們可以看到接口能正常的返回結果值。

那么我們修改,user api user.yaml 配置文件中的 Token 值再次請求接口試試。
提示:修改 yaml 配置文件需要重啟服務才有效

我們可以從返回的結果中看出,rpc 服務報錯了,未經認證,拒絕訪問。
大家可以自己再嘗試修改 user rpc user.yaml 配置文件中 StrictControl 為 false 看看效果。
項目地址
https://github.com/zeromicro/go-zero
歡迎使用 go-zero 并 star 支持我們!
推薦閱讀
