帶你十天輕鬆搞定 Go 微服務系列(七)
序言
我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
-
環境搭建:帶你十天輕鬆搞定 Go 微服務系列(一)
-
服務拆分:帶你十天輕鬆搞定 Go 微服務系列(二)
-
用戶服務:帶你十天輕鬆搞定 Go 微服務系列(三)
-
產品服務:帶你十天輕鬆搞定 Go 微服務系列(四)
-
訂單服務:帶你十天輕鬆搞定 Go 微服務系列(五)
-
支付服務:帶你十天輕鬆搞定 Go 微服務系列(六)
-
RPC 服務 Auth 驗證(本文)
-
服務監控
-
鏈路追蹤
-
分佈式事務
期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。
完整示例代碼:https://github.com/nivin-studio/go-zero-mall
首先,我們來看一下整體的服務拆分圖:
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 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 支持我們!
微信交流羣
關注『微服務實踐』公衆號並點擊 交流羣 獲取社區羣二維碼。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/TNK6USlxUKQmrOjPtJIS1Q