Fix gRPC to call credentials.before_request (#116)
diff --git a/google/auth/credentials.py b/google/auth/credentials.py
index 2358b1d..8570957 100644
--- a/google/auth/credentials.py
+++ b/google/auth/credentials.py
@@ -104,8 +104,9 @@
Args:
request (google.auth.transport.Request): The object used to make
HTTP requests.
- method (str): The request's HTTP method.
- url (str): The request's URI.
+ method (str): The request's HTTP method or the RPC method being
+ invoked.
+ url (str): The request's URI or the RPC service's URI.
headers (Mapping): The request's headers.
"""
# pylint: disable=unused-argument
diff --git a/google/auth/transport/grpc.py b/google/auth/transport/grpc.py
index e6a5eb7..81d5658 100644
--- a/google/auth/transport/grpc.py
+++ b/google/auth/transport/grpc.py
@@ -17,6 +17,7 @@
from __future__ import absolute_import
import grpc
+import six
class AuthMetadataPlugin(grpc.AuthMetadataPlugin):
@@ -40,19 +41,21 @@
self._credentials = credentials
self._request = request
- def _get_authorization_headers(self):
+ def _get_authorization_headers(self, context):
"""Gets the authorization headers for a request.
Returns:
Sequence[Tuple[str, str]]: A list of request headers (key, value)
to add to the request.
"""
- if self._credentials.expired or not self._credentials.valid:
- self._credentials.refresh(self._request)
+ headers = {}
+ self._credentials.before_request(
+ self._request,
+ context.method_name,
+ context.service_url,
+ headers)
- return [
- ('authorization', 'Bearer {}'.format(self._credentials.token))
- ]
+ return list(six.iteritems(headers))
def __call__(self, context, callback):
"""Passes authorization metadata into the given callback.
@@ -62,7 +65,7 @@
callback (grpc.AuthMetadataPluginCallback): The callback that will
be invoked to pass in the authorization metadata.
"""
- callback(self._get_authorization_headers(), None)
+ callback(self._get_authorization_headers(context), None)
def secure_authorized_channel(