帶你十天輕鬆搞定 Go 微服務系列(七)

語言: CN / TW / HK

序言

我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:

  1. 環境搭建: 帶你十天輕鬆搞定 Go 微服務系列(一)

  2. 服務拆分: 帶你十天輕鬆搞定 Go 微服務系列(二)

  3. 使用者服務: 帶你十天輕鬆搞定 Go 微服務系列(三)

  4. 產品服務: 帶你十天輕鬆搞定 Go 微服務系列(四)

  5. 訂單服務: 帶你十天輕鬆搞定 Go 微服務系列(五)

  6. 支付服務: 帶你十天輕鬆搞定 Go 微服務系列(六)

  7. RPC 服務 Auth 驗證(本文)

  8. 服務監控

  9. 鏈路追蹤

  10. 分散式事務

期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。

完整示例程式碼:https://github.com/nivin-studio/go-zero-mall

首先,我們來看一下整體的服務拆分圖:

7 RPC服務 Auth 驗證

在前面幾章我們已經分別實現了 user product order payrpc 服務和 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 指定 keyhash keyToken 值作為 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 apilogin 介面,我們可以看到介面能正常的返回結果值。

那麼我們修改, user api user.yaml 配置檔案中的 Token 值再次請求介面試試。

提示:修改 yaml 配置檔案需要重啟服務才有效

我們可以從返回的結果中看出, rpc 服務報錯了,未經認證,拒絕訪問。

大家可以自己再嘗試修改 user rpc user.yaml 配置檔案中 StrictControlfalse 看看效果。

專案地址

https://github.com/zeromicro/go-zero

歡迎使用 go-zerostar 支援我們!

微信交流群

關注『 微服務實踐 』公眾號並點選 交流群 獲取社群群二維碼。