Как использовать учетные данные, полученные от google, с помощью google API

Libs: dj-rest-auth + allauth

I. Я пытаюсь взаимодействовать с google API с учетными данными, которые я использую для получения внутреннего токена доступа. Мне удалось получить code и token, но я не могу найти, как использовать их с google API. Последняя страница, которую я нашел неприменимой, это https://github.com/googleapis/google-api-python-client/blob/main/docs/oauth.md, но, возможно, я что-то упускаю.

Вот представление, в котором я пытаюсь использовать google API:

class CreateGoogleDoc(GenericAPIView):
    ...

    def get(self, request):
        token = request.query_params['token']
        module_dir = os.path.dirname(__file__)  # get current directory
        file_path = os.path.join(module_dir, 'client_secret.json')
        flow = Flow.from_client_secrets_file(
                    file_path,
                    scopes=SCOPES,
                    redirect_uri='https://example.com'
        )
        credentials = service_account.Credentials.from_service_account_file(file_path, scopes=SCOPES)
        service = build('docs', 'v1', credentials=credentials)

        document = service.documents().create().execute()
        return Response([document['documentId']])


II. Когда я попытался поменять code на внутренний класс токенов доступа, я получил другую ошибку:

Error retrieving access token: `{  "error": "invalid_request",  "error_description": "You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy for keeping apps secure. You can let the app developer know that this app doesn't comply with one or more Google validation rules."}`

Вот представление, которое я использую для свопинга:

GoogleLogin(SocialLoginView):
    adapter_class = GoogleOAuth2Adapter
    callback_url = 'http://localhist:8000/dj-rest-auth/google/'
    client_class = OAuth2Client

Спасибо!

Предложение обходного пути

Если у вас уже есть токен из ответа GET, почему вы пытаетесь получить учетные данные из файла учетной записи службы? Возможно, там какая-то неправильная конфигурация, но если у вас уже есть токен доступа, вы можете просто использовать его, как показано ниже, и избежать всего процесса получения токена из учетной записи службы.

from google.oauth2.credentials import Credentials

# ...

def get(self, request):
    token = request.query_params['token']
    credentials = Credentials(token)
    service = build('docs', 'v1', credentials=credentials)

    document = service.documents().create().execute()

    return Response([document['documentId']])
Вернуться на верх