code: def authenticate(self, auth_token, auth_info, service_name):
          
          try:
              jwt_claims = self.get_jwt_claims(auth_token)
          except Exception as error:
              raise suppliers.UnauthenticatedException(u"Cannot decode the auth token",
                                                       error)
          _check_jwt_claims(jwt_claims)
  
          user_info = UserInfo(jwt_claims)
  
          issuer = user_info.issuer
          if issuer not in self._issuers_to_provider_ids:
              raise suppliers.UnauthenticatedException(u"Unknown issuer: " + issuer)
          provider_id = self._issuers_to_provider_ids[issuer]
  
          if not auth_info.is_provider_allowed(provider_id):
              raise suppliers.UnauthenticatedException(u"The requested method does not "
                                                       u"allow provider id: " + provider_id)
  
          # Check the audiences decoded from the auth token. The auth token is
          # allowed when 1) an audience is equal to the service name, or 2) at least
          # one audience is allowed in the method configuration.
          audiences = user_info.audiences
          has_service_name = service_name in audiences
  
          allowed_audiences = auth_info.get_allowed_audiences(provider_id)
          intersected_audiences = set(allowed_audiences).intersection(audiences)
          if not has_service_name and not intersected_audiences:
              raise suppliers.UnauthenticatedException(u"Audiences not allowed")
  
          return user_info
docs: Authenticates the current auth token.
  
          Args:
            auth_token: the auth token.
            auth_info: the auth configurations of the API method being called.
            service_name: the name of this service.
  
          Returns:
            A constructed UserInfo object representing the identity of the caller.
  
          Raises:
            UnauthenticatedException: When
              * the issuer is not allowed;
              * the audiences are not allowed;
              * the auth token has already expired.