序言
我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
- 環境搭建
- 服務拆分
- 使用者服務
- 產品服務
- 訂單服務
- 支付服務
- RPC 服務 Auth 驗證(本文)
- 服務監控
- 鏈路追蹤
- 分散式事務
期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。
完整示例程式碼:github.com/nivin-studio/go-zero-ma...
首先,我們來看一下整體的服務拆分圖:
7 RPC服務 Auth 驗證
在前面幾章我們已經分別實現了 user
product
order
pay
的 rpc
服務和 api
服務。在 api
服務中我們使用 go-zero
框架自帶的 jwt
實現鑑權驗證。那麼接下里我們就說說 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
驗證
- 進入服務工作區
$ cd mall/service/user
- 修改
user rpc
user.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 api
user.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
看看效果。
專案地址
歡迎使用 go-zero
並 star 支援我們!
微信交流群
關注『微服務實踐』公眾號並點選 交流群 獲取社群群二維碼。
本作品採用《CC 協議》,轉載必須註明作者和本文連結