我正在用Go语言编写gRPC客户端应用程序。

每个ClientConn都有JWT token ,现在我在对各种JWT token 应用缓存/重用ClientConn时遇到一些问题。

以前,我每次使用新的JWT token 每次都创建ClientConn,如下所示:

conn, err := grpc.Dial(endpoint, WithPerRPCCredentials(oauth.NewOauthAccess(token))

但是在我的应用程序中, token 每次都会更改。但是我找不到仅应用新 token 即可重用现有ClientConn的方法。

有没有办法用现有的ClientConn替换特定的DialOption(或替换JWT token )?

还是这是为每个gRPC调用将Authorization元数据注入到上下文中的最佳方法?

最佳答案

正如@apolcyn提到的,PerRpcCredentials实现通常负责刷新访问 token 。

如果您有JWT token ,也可以使用NewJWTAccessFromFileNewJWTAccessFromKey进行研究。

在任何情况下,如果 token 源可以更改,并且您仍然希望能够使用相同的ClientConn,则可以在创建的每个RPC中使用CallOption来指定凭据,而不是在创建DialOption时将其指定为ClientConn。 。这是您感兴趣的callOption:https://godoc.org/google.golang.org/grpc#PerRPCCredentials

向每个gRPC调用中注入任意元数据的另一种选择是使用客户端拦截器。请参阅WithUnaryInterceptorWithStreamInterceptor DialOptions。

希望这可以帮助。

关于go - 如何在现有ClientConn上添加clientOption?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61298896/

10-13 08:45