我正在用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 ,也可以使用NewJWTAccessFromFile或NewJWTAccessFromKey进行研究。
在任何情况下,如果 token 源可以更改,并且您仍然希望能够使用相同的ClientConn
,则可以在创建的每个RPC中使用CallOption
来指定凭据,而不是在创建DialOption
时将其指定为ClientConn
。 。这是您感兴趣的callOption:https://godoc.org/google.golang.org/grpc#PerRPCCredentials
向每个gRPC调用中注入任意元数据的另一种选择是使用客户端拦截器。请参阅WithUnaryInterceptor
或WithStreamInterceptor
DialOptions。
希望这可以帮助。
关于go - 如何在现有ClientConn上添加clientOption?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61298896/