我是 GO 新手,我正在關注https://parthdesai.me/articles/2016/05/20/go-rpc-server/來構建一個簡單的 RPC 服務器和客戶端。在這篇文章中,它說
這種方法 (HTTP) 的好處是,在允許 RPC 之前,您可以使用 HTTP 支持的任何身份驗證方法輕松執行客戶端身份驗證。
但是頁面上的示例似乎沒有執行它。我在 StackOverflow 上進行了搜索,發現使用 JSON-RPC 呼叫傳遞身份驗證詳細資訊說
有兩種方法可以實作你想要的:要么實作一個 HTTP-speaking
io.ReadWriteCloser并在你的示例中使用,要么實作一個執行rpc.ClientCodecHTTP 基本身份驗證并與rpc.NewClientWithCodec.
但是,我仍然不知道該怎么做。我可以有一些示例代碼(可能是Basic Authentication方法)嗎?
uj5u.com熱心網友回復:
在 gRPC 中間件中使用轉碼和檢查身份驗證比使用gRPC 網關的 gRPC 更好地用于 http 服務器。
https://cloud.google.com/endpoints/docs/grpc/transcoding
要在標頭中獲得授權,請使用 gRPC 中間件并使用 gRPC MD 從背景關系中獲取。
srv := grpc.NewServer(exampleJwtMiddleware())
func exampleJwtMiddleware() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
token, err := extractHeaderFromContext(ctx, "Authorization")
// do sometings...
return handler(ctx, req)
}
}
func extractHeaderFromContext(ctx context.Context, header string) ([]string, error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, ERROR_NO_HEADER_IN_REQUEST
}
foundedHeaders, ok := md[header]
if !ok {
return nil, ERROR_NO_HEADER_IN_REQUEST
}
return foundedHeaders, nil
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516134.html
標籤:验证去RPC
