mirror of https://github.com/grpc/grpc.io.git
				
				
				
			Authentication examples for Node.js and Python (#535)
This commit is contained in:
		
							parent
							
								
									abf7cb9527
								
							
						
					
					
						commit
						dc36e5bb8f
					
				|  | @ -421,6 +421,77 @@ channel = google_auth_transport_grpc.secure_authorized_channel( | |||
| stub = helloworld_pb2.GreeterStub(channel) | ||||
| ``` | ||||
| 
 | ||||
| ##### With server authentication SSL/TLS and a custom header with token | ||||
| 
 | ||||
| Client: | ||||
| 
 | ||||
| ```python | ||||
| import grpc | ||||
| import helloworld_pb2 | ||||
| 
 | ||||
| class GrpcAuth(grpc.AuthMetadataPlugin): | ||||
|     def __init__(self, key): | ||||
|         self._key = key | ||||
| 
 | ||||
|     def __call__(self, context, callback): | ||||
|         callback((('rpc-auth-header', self._key),), None) | ||||
| 
 | ||||
| with open('path/to/root-cert', 'rb') as fh: | ||||
|     root_cert = fh.read() | ||||
| 
 | ||||
| channel = grpc.secure_channel( | ||||
|     'myservice.example.com:443', | ||||
|     grpc.composite_channel_credentials( | ||||
|         grpc.ssl_channel_credentials(root_cert), | ||||
|         grpc.metadata_call_credentials( | ||||
|             GrpcAuth('access_key') | ||||
|         ) | ||||
|     ) | ||||
| ) | ||||
| 
 | ||||
| stub = helloworld_pb2.GreeterStub(channel) | ||||
| ``` | ||||
| 
 | ||||
| Server: | ||||
| 
 | ||||
| ```python | ||||
| from concurrent import futures | ||||
| 
 | ||||
| import grpc | ||||
| import helloworld_pb2 | ||||
| 
 | ||||
| class AuthInterceptor(grpc.ServerInterceptor): | ||||
|     def __init__(self, key): | ||||
|         self._valid_metadata = ('rpc-auth-header', key) | ||||
| 
 | ||||
|         def deny(_, context): | ||||
|             context.abort(grpc.StatusCode.UNAUTHENTICATED, 'Invalid key') | ||||
| 
 | ||||
|         self._deny = grpc.unary_unary_rpc_method_handler(deny) | ||||
| 
 | ||||
|     def intercept_service(self, continuation, handler_call_details): | ||||
|         meta = handler_call_details.invocation_metadata | ||||
| 
 | ||||
|         if meta and meta[0] == self._valid_metadata: | ||||
|             return continuation(handler_call_details) | ||||
|         else: | ||||
|             return self._deny | ||||
| 
 | ||||
| server = grpc.server( | ||||
|     futures.ThreadPoolExecutor(max_workers=10), | ||||
|     interceptors=(AuthInterceptor('access_key'),) | ||||
| ) | ||||
| with open('key.pem', 'rb') as f: | ||||
|     private_key = f.read() | ||||
| with open('chain.pem', 'rb') as f: | ||||
|     certificate_chain = f.read() | ||||
| server_credentials = grpc.ssl_server_credentials( ( (private_key, certificate_chain), ) ) | ||||
| # Adding GreeterServicer to server omitted | ||||
| server.add_secure_port('myservice.example.com:443', server_credentials) | ||||
| server.start() | ||||
| # Server sleep omitted | ||||
| ``` | ||||
| 
 | ||||
| #### Java | ||||
| 
 | ||||
| ##### Base case - no encryption or authentication | ||||
|  | @ -505,8 +576,9 @@ var stub = new helloworld.Greeter('localhost:50051', grpc.credentials.createInse | |||
| ##### With server authentication SSL/TLS | ||||
| 
 | ||||
| ```js | ||||
| var ssl_creds = grpc.credentials.createSsl(root_certs); | ||||
| var stub = new helloworld.Greeter('myservice.example.com', ssl_creds); | ||||
| const root_cert = fs.readFileSync('path/to/root-cert'); | ||||
| const ssl_creds = grpc.credentials.createSsl(root_cert); | ||||
| const stub = new helloworld.Greeter('myservice.example.com', ssl_creds); | ||||
| ``` | ||||
| 
 | ||||
| ##### Authenticate with Google | ||||
|  | @ -540,6 +612,21 @@ var scope = 'https://www.googleapis.com/auth/grpc-testing'; | |||
| }); | ||||
| ``` | ||||
| 
 | ||||
| ##### With server authentication SSL/TLS and a custom header with token | ||||
| 
 | ||||
| ```js | ||||
| const rootCert = fs.readFileSync('path/to/root-cert'); | ||||
| const channelCreds = grpc.credentials.createSsl(rootCert); | ||||
| const metaCallback = (_params, callback) => { | ||||
|     const meta = new grpc.Metadata(); | ||||
|     meta.add('custom-auth-header', 'token'); | ||||
|     callback(null, meta); | ||||
| } | ||||
| const callCreds = grpc.credentials.createFromMetadataGenerator(metaCallback); | ||||
| const combCreds = grpc.credentials.combineChannelCredentials(channelCreds, callCreds); | ||||
| const stub = new helloworld.Greeter('myservice.example.com', combCreds); | ||||
| ``` | ||||
| 
 | ||||
| #### PHP | ||||
| 
 | ||||
| ##### Base case - No encryption/authorization | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue