Open12
go-zero で Auth を有効にする
go-zero で開発しているけど、ドキュメント足りない
設定の中に Auth
設定があったからメモ残す
yaml
ファイルに設定を追加する
config.yaml
Name: dummy.rpc
ListenOn: 0.0.0.0:9000
Auth: true
実行するとエラー起きる
2023/09/24 19:24:55 empty redis host
goroutine 1 [running]:
runtime/debug.Stack()
/Users/135yshr/sdk/go1.21.0/src/runtime/debug/stack.go:24 +0x64
github.com/zeromicro/go-zero/core/logx.Must({0x105cd46a8?, 0x106c4c390?})
/Users/135yshr/go/pkg/mod/github.com/zeromicro/go-zero@v1.5.5/core/logx/logs.go:225 +0x40
github.com/zeromicro/go-zero/zrpc.MustNewServer({{{0x14000147bd0, 0x8}, {{0x0, 0x0}, {0x14000147cd8, 0x7}, {0x14000147d28, 0x4}, {0x0, 0x0}, ...}, ...}, ...}, ...)
/Users/135yshr/go/pkg/mod/github.com/zeromicro/go-zero@v1.5.5/zrpc/server.go:25 +0x50
main.main()
/Users/135yshr/go/src/github.com/SwipeVideo/sv-learning-tags/cmd/server.go:40 +0x1d8
{"@timestamp":"2023-09-24T19:24:55.953+09:00","content":"empty redis host\n\ngoroutine 1 [running]:\nruntime/debug.Stack()\n\t/Users/135yshr/sdk/go1.21.0/src/runtime/debug/stack.go:24 +0x64\ngithub.com/zeromicro/go-zero/core/logx.Must({0x105cd46a8?, 0x106c4c390?})\n\t/Users/135yshr/go/pkg/mod/github.com/zeromicro/go-zero@v1.5.5/core/logx/logs.go:225 +0x40\ngithub.com/zeromicro/go-zero/zrpc.MustNewServer({{{0x14000147bd0, 0x8}, {{0x0, 0x0}, {0x14000147cd8, 0x7}, {0x14000147d28, 0x4}, {0x0, 0x0}, ...}, ...}, ...}, ...)\n\t/Users/135yshr/go/pkg/mod/github.com/zeromicro/go-zero@v1.5.5/zrpc/server.go:25 +0x50\nmain.main()\n\t/Users/135yshr/go/src/github.com/SwipeVideo/sv-learning-tags/cmd/server.go:40 +0x1d8\n","level":"fatal"}
exit status 1
Redis の設定が必要なので追加する
config.yaml
Name: dummy.rpc
ListenOn: 0.0.0.0:9000
Auth: true
Redis:
Key: "auth"
Host: 127.0.0.1:16379
ちゃんと認証に失敗
grpcurl -plaintext localhost:9000 version.v1.VersionService/Version
Error invoking method "version.v1.VersionService/Version": rpc error: code = Unauthenticated desc = failed to query for service descriptor "version.v1.VersionService": app/token required
ここからが本題認証を通すにはどうしたらいいのか
ざっとコード読む
- metadata からアプリケーションキーとトークンを取ってくる
- 設定ファイルの
Redis.Key
とアプリケーションキーで認証情報を取得する - 取得した認証情報とトークンを突合して、一緒だったら認証OK
Redis.Key
に auth
を設定しているので、Redis に登録する
redis-cli
localhost@6379> hset auth app token
1
次の問題は、metadata
にどんな設定するか。
Redis には、 key
に auth
。field
に app
を設定している(前投稿)ので、以下のようになる。
<token>
には、認証に使うトークンを設定
Key | Value |
---|---|
app | app |
token | <token> |
コマンド実行して確認
今回は、token
に token を設定した
grpcurl -plaintext -H 'app: auth' -H 'token: token' localhost:9000 version.v1.VersionService/Version
うまくいったので、Done
事前に登録するのは、よろしく無いので今度は認証システムと連携取ろう