14 """Server of the Python example of customizing authentication mechanism."""
17 from concurrent
import futures
24 helloworld_pb2, helloworld_pb2_grpc = grpc.protos_and_services(
27 _LOGGER = logging.getLogger(__name__)
28 _LOGGER.setLevel(logging.INFO)
30 _LISTEN_ADDRESS_TEMPLATE =
'localhost:%d'
31 _SIGNATURE_HEADER_KEY =
'x-signature'
38 def abort(ignored_request, context):
39 context.abort(grpc.StatusCode.UNAUTHENTICATED,
'Invalid signature')
48 method_name = handler_call_details.method.split(
'/')[-1]
49 expected_metadata = (_SIGNATURE_HEADER_KEY, method_name[::-1])
50 if expected_metadata
in handler_call_details.invocation_metadata:
51 return continuation(handler_call_details)
62 @contextlib.contextmanager
71 _credentials.SERVER_CERTIFICATE_KEY,
72 _credentials.SERVER_CERTIFICATE,
76 port = server.add_secure_port(_LISTEN_ADDRESS_TEMPLATE % port,
87 parser = argparse.ArgumentParser()
88 parser.add_argument(
'--port',
92 help=
'the listening port')
93 args = parser.parse_args()
96 logging.info(
'Server is listening at port :%d', port)
97 server.wait_for_termination()
100 if __name__ ==
'__main__':
101 logging.basicConfig(level=logging.INFO)