1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- // The client demonstrates how to supply an OAuth2 token for every RPC.
- package main
- import (
- "context"
- "flag"
- "fmt"
- "log"
- "time"
- "golang.org/x/oauth2"
- "google.golang.org/grpc"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/credentials/oauth"
- ecpb "google.golang.org/grpc/examples/features/proto/echo"
- "google.golang.org/grpc/testdata"
- )
- var addr = flag.String("addr", "localhost:50051", "the address to connect to")
- func callUnaryEcho(client ecpb.EchoClient, message string) {
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- resp, err := client.UnaryEcho(ctx, &ecpb.EchoRequest{Message: message})
- if err != nil {
- log.Fatalf("client.UnaryEcho(_) = _, %v: ", err)
- }
- fmt.Println("UnaryEcho: ", resp.Message)
- }
- func main() {
- flag.Parse()
- // Set up the credentials for the connection.
- perRPC := oauth.NewOauthAccess(fetchToken())
- creds, err := credentials.NewClientTLSFromFile(testdata.Path("ca.pem"), "x.test.youtube.com")
- if err != nil {
- log.Fatalf("failed to load credentials: %v", err)
- }
- opts := []grpc.DialOption{
- // In addition to the following grpc.DialOption, callers may also use
- // the grpc.CallOption grpc.PerRPCCredentials with the RPC invocation
- // itself.
- // See: https://godoc.org/google.golang.org/grpc#PerRPCCredentials
- grpc.WithPerRPCCredentials(perRPC),
- // oauth.NewOauthAccess requires the configuration of transport
- // credentials.
- grpc.WithTransportCredentials(creds),
- }
- conn, err := grpc.Dial(*addr, opts...)
- if err != nil {
- log.Fatalf("did not connect: %v", err)
- }
- defer conn.Close()
- rgc := ecpb.NewEchoClient(conn)
- callUnaryEcho(rgc, "hello world")
- }
- // fetchToken simulates a token lookup and omits the details of proper token
- // acquisition. For examples of how to acquire an OAuth2 token, see:
- // https://godoc.org/golang.org/x/oauth2
- func fetchToken() *oauth2.Token {
- return &oauth2.Token{
- AccessToken: "some-secret-token",
- }
- }
|