Open12

go-zero で Auth を有効にする

135yshr135yshr

go-zero で開発しているけど、ドキュメント足りない

135yshr135yshr

yaml ファイルに設定を追加する

config.yaml
Name: dummy.rpc
ListenOn: 0.0.0.0:9000
Auth: true
135yshr135yshr

実行するとエラー起きる

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
135yshr135yshr

Redis の設定が必要なので追加する

config.yaml
Name: dummy.rpc
ListenOn: 0.0.0.0:9000
Auth: true
Redis:
  Key: "auth"
  Host: 127.0.0.1:16379
135yshr135yshr

ちゃんと認証に失敗

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
135yshr135yshr

ここからが本題認証を通すにはどうしたらいいのか

135yshr135yshr

Redis.Keyauth を設定しているので、Redis に登録する

redis-cli
localhost@6379> hset auth app token
1
135yshr135yshr

次の問題は、metadata にどんな設定するか。
Redis には、 keyauthfieldapp を設定している(前投稿)ので、以下のようになる。
<token> には、認証に使うトークンを設定

Key Value
app app
token <token>
135yshr135yshr

コマンド実行して確認

今回は、token に token を設定した

grpcurl -plaintext -H 'app: auth' -H 'token: token' localhost:9000 version.v1.VersionService/Version
135yshr135yshr

うまくいったので、Done
事前に登録するのは、よろしく無いので今度は認証システムと連携取ろう