帶你十天輕鬆搞定 Go 微服務系列(七)
序言
我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
-
環境搭建: 帶你十天輕鬆搞定 Go 微服務系列(一)
-
服務拆分: 帶你十天輕鬆搞定 Go 微服務系列(二)
-
使用者服務: 帶你十天輕鬆搞定 Go 微服務系列(三)
-
產品服務: 帶你十天輕鬆搞定 Go 微服務系列(四)
-
訂單服務: 帶你十天輕鬆搞定 Go 微服務系列(五)
-
支付服務: 帶你十天輕鬆搞定 Go 微服務系列(六)
-
RPC 服務 Auth 驗證(本文)
-
服務監控
-
鏈路追蹤
-
分散式事務
期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。
完整示例程式碼:http://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 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
看看效果。
專案地址
http://github.com/zeromicro/go-zero
歡迎使用 go-zero
並 star 支援我們!
微信交流群
關注『 微服務實踐 』公眾號並點選 交流群 獲取社群群二維碼。
- 簡單易懂的 Go 泛型使用和實現原理介紹
- 單體服務開發最佳實踐
- 通過 SingleFlight 模式學習 Go 併發程式設計
- 進城內優雅管理多個服務
- Go Web 服務框架實現詳解
- go-zero程式碼生成器助你高效開發
- 構建 Go 應用 docker 映象的十八種姿勢
- 史上最強程式碼自測方法,沒有之一!
- 帶你十天輕鬆搞定 Go 微服務系列(九、鏈路追蹤)
- 帶你十天輕鬆搞定 Go 微服務系列(八、服務監控)
- 帶你十天輕鬆搞定 Go 微服務系列(七)
- 小米電商 Apache Dubbo-go 微服務實踐
- 帶你十天輕鬆搞定 Go 微服務系列(三)
- 帶你十天輕鬆搞定 Go 微服務系列(二)
- 帶你十天輕鬆搞定 Go 微服務系列(一)
- Go 分散式令牌桶限流 兜底保障
- 最簡單的服務響應時長優化方法,沒有之一
- 夢想總是要有的 - 工作20年程式設計師的2021年終總結
- go-zero 分散式事務最佳實踐
- 用 Go Redis 實現分散式鎖