当前位置: 首页 > 后端技术 > PHP

BringingRPC-DocustomauthenticationforRPCmethods

时间:2023-03-30 03:23:36 PHP

鍘熸枃鍦板潃锛欱ringingRPC:DocustomauthenticationforRPCmethods椤圭洰鍦板潃锛歨ttps://github.com/EDDYCJY/go...鍓嶈█鍦ㄤ笂涓€绔狅紝鎴戜滑浠嬬粛浜嗗叏灞€璁よ瘉鐨勪袱绉嶏紙璇佷功绠椾竴涓級鏂瑰紡锛氬熀浜嶤A鐨凾LS璇佷功璁よ瘉Unary鍜孲treaminterceptor鐨凾LS璇佷功璁よ瘉鍦ㄥ疄闄呴渶瑕佷腑锛屽線寰€浼氬涓€浜涙ā鍧楃殑RPC鏂规硶鍋氱壒娈婄殑璁よ瘉鎴栬€呴獙璇併€備粖澶╂垜灏辨潵璁茶В鍜屽疄鐜拌繖涓姛鑳界偣銆傝鍓嶇煡璇嗙被鍨婸erRPCCredentialsinterface{GetRequestMetadata(ctxcontext.Context,uri...string)(map[string]string,error)RequireTransportSecurity()bool}鍦╣RPCPerRPCCredentials涓粯璁ゅ畾涔夛紝涔熷氨鏄湰绔犵殑涓昏,鏄痝RPC榛樿鎻愪緵鐨勭敤浜庤嚜瀹氫箟璁よ瘉鐨勬帴鍙c€傚畠鐨勪綔鐢ㄦ槸灏嗛渶瑕佺殑瀹夊叏璁よ瘉淇℃伅娣诲姞鍒版瘡涓猂PC鏂规硶鐨勪笂涓嬫枃涓€傚寘鍚?涓柟娉曪細GetRequestMetadata锛氳幏鍙栧綋鍓嶈姹傝璇佹墍闇€鐨勫厓鏁版嵁锛坢etadata锛塕equireTransportSecurity锛氭槸鍚﹂渶瑕佽繘琛屽熀浜嶵LS璁よ瘉鐨勫畨鍏ㄤ紶杈撶洰褰曠粨鏋勬柊寤簊imple_token_server/server.go鍜宻imple_token_client/client.go锛岀洰褰曠粨鏋勫涓嬫墍绀猴細鈹溾攢鈹€simple_http_server鈹傗敎鈹€鈹€simple_server鈹傗敎鈹€鈹€simple_token_server鈹傗敂鈹€鈹€stream_server鈹斺攢鈹€vendorgRPCClientpackagemainimport("context""log""google.golang.org/grpc""github.com/EDDYCJY/go-grpc-example/pkg/gtls"pb"github.com/EDDYCJY/go-grpc-example/proto")constPORT="9004"typeAuthstruct{AppKeystringAppSecretstring}func(a*Auth)GetRequestMetadata(ctxcontext.涓婁笅鏂囷紝uri...string)(map[string]string,error){returnmap[string]string{"app_key":a.AppKey,"app_secret":a.AppSecret},nil}func(a*Auth)RequireTransportSecurity()bool{returntrue}funcmain(){tlsClient:=gtls.Client{ServerName:"go-grpc-example",CertFile:"../../conf/server/server.pem",}c,err:=tlsClient.GetTLSCredentials()濡傛灉閿欒锛?nil{log.Fatalf("tlsClient.GetTLSCredentialserr:%v",err)}auth:=Auth{AppKey:"eddycjy",AppSecret:"20181005",}conn,err:=grpc.Dial(":"+绔彛,grpc.WithTransportCredentials(c),grpc.WithPerRPCCredentials(&auth))...}鍦ㄥ鎴风锛岄噸鐐瑰疄鐜扮被鍨婸erRPCCredentials鎺ュ彛闇€瑕佺殑鏂规硶锛岄噸鐐瑰叧娉ㄤ袱鐐癸細structAuth:GetRequestMetadata,RequireTransportSecuritygrpc.WithPerRPCCredentialsServerpackagemainimport锛堚€滀笂涓嬫枃鈥濃€滄棩蹇椻€濃€滅綉缁溾€濃€済oogle.golang.org/grpc鈥濃€済oogle.golang.org/grpc/codes鈥濃€済oogle.golang.org/grpc/metadata鈥濃€済oogle.golang.org/grpc/status""github.com/EDDYCJY/go-grpc-example/pkg/gtls"pb"github.com/EDDYCJY/go-grpc-example/proto")typeSearchServicestruct{auth*Auth}func(s*SearchService)鎼滅储(ctxcontext.Contextt,r*pb.SearchRequest)(*pb.SearchResponse,閿欒){iferr:=s.auth.Check(ctx);閿欒锛?nil{returnnil,err}return&pb.SearchResponse{Response:r.GetRequest()+"TokenServer"},nil}constPORT="9004"funcmain(){...}typeAuthstruct{appKeystringappSecretstring}func(a*Auth)Check(ctxcontext.Context)error{md,ok:=metadata.FromIncomingContext(ctx)if!ok{returnstatus.Errorf(codes.Unauthenticated,"鑷畾涔夎璇乀oken涓㈠け")}var(appKeystringappSecretstring)ifvalue,ok:=md["app_key"];ok{appKey=value[0]}濡傛灉鍊硷紝ok:=md["app_secret"];濂界殑{appSecret=value[0]}濡傛灉appKey!=a.GetAppKey()||appSecret!=a.GetAppSecret(){returnstatus.Errorf(codes.Unauthenticated,"鑷畾涔夎璇乀oken鏃犳晥")}returnnil}func(a*Auth)GetAppKey()string{return"eddycjy"}func(a*Auth)GetAppSecret()瀛楃涓瞷杩斿洖"20181005"}鍦ㄦ湇鍔$灏辨洿绠€鍗曚簡锛屽畠瀹為檯涓婃槸璋冪敤metadata.FromIncomingContext浠庝笂涓嬫枃涓幏鍙栧厓鏁版嵁锛岀劧鍚庡湪涓嶅悓鐨凴PC鏂规硶涓繘琛岄壌鏉冩鏌ュ拰楠岃瘉銆傞噸鍚痵erver.go鍜宑lient.go锛屽緱鍒板涓嬬粨鏋滐細$gorunclient.go2018/10/0520:59:58resp:gRPCTokenServer淇敼client.go鐨勫€奸€犳垚涓よ€呬笉涓€鑷达紝寰楀埌鏃犳晥缁撴灉锛?gorunclient.go2018/10/0521:00:05client.Searcherr:rpcerror:code=Unauthenticateddesc=invalidtokenexitstatus1涓€涓竴涓坊鍔犲お楹荤儲浜嗭紝鐩镐俊浣犺偗瀹氫細瑕佹眰涓€涓竴涓坊鍔狅紝鏄笉鏄お楹荤儲浜嗭紵濡傛灉鏈夎繖涓兂娉曪紝搴旇鎶奝erRPCCredentials鎺ュ彛绫诲瀷鍋氭垚Interceptor锛堟嫤鎴櫒锛夋€荤粨鏈珷姣旇緝绠€鍗曪紝涓昏浠嬬粛RPC鏂瑰紡鐨勮嚜瀹氫箟璁よ瘉锛屽鏋滆鍋氬叏灞€锛屽缓璁涔犱竴涓疄渚嬪苟浠庢嫤鎴紑濮嬪櫒銆傪煒勫弬鑰冩湰绯诲垪绀轰緥浠g爜go-grpc-example绯诲垪鐩綍gRPC寮曞叆锛歡RPC鍙婄浉鍏充粙缁峠RPC寮曞叆锛歡RPCClient鍜孲erver寮曞叆gRPC锛歡RPCStreaming锛孋lient鍜孲erver寮曞叆gRPC:gRPC寮曞叆TLS璇佷功璁よ瘉:gRPC寮曞叆鍩轰簬CA鐨凾LS璇佷功璁よ瘉:UnaryandStreaminterceptor寮曞叆gRPC:璁╀綘鐨勬湇鍔″悓鏃舵彁渚汬TTP鎺ュ彛寮曞叆gRPC:涓篟PC鏂规硶鍋氳嚜瀹氫箟璁よ瘉寮曞叆gRPC锛歡RPC鎴鏃ユ湡