При входе в Google API OAuth 2 что-то пошло не так с новым клиентом OAuth 2

Я пытаюсь создать бота Discord, который взаимодействует с Google API, в частности с Google Classroom API, поэтому я создал новый проект из консоли Google и создал новый клиент OAuth для веб-приложения. Я также включил Classroom API и выбрал все области, которые хотел использовать:

['https://www.googleapis.com/auth/classroom.course-work.readonly',
 'https://www.googleapis.com/auth/classroom.student-submissions.students.readonly',
 'https://www.googleapis.com/auth/classroom.courses.readonly']

Затем я настроил свою программу на Python на примере Google (сначала я написал свою, используя документацию, но получил тот же результат). Когда я запускаю пример кода, все идет нормально, он открывает браузер и просит меня выбрать свою учетную запись, я выбираю свою школьную учетную запись, и когда она загружается, я ожидаю, что экран авторизации появится, чтобы спросить меня, разрешаю ли я запрошенные данные. говорит, что что-то пошло не так, без сообщений об ошибках. Я загрузил правильную папку credentials.json из панели управления Google и использовал ее в своей программе.

Я также предоставлю упрощенный код, который я написал, возможно, это проблема.

import pickle
import os
from google_auth_oauthlib.flow import Flow, InstalledAppFlow
from googleapiclient.discovery import build
from google.auth.transport.requests import Request


CLIENTSECRETPATH = "credentials.json"
APISERVICENAME = "classroom"
APIVERSION = "v1"
SCOPES = ['https://www.googleapis.com/auth/classroom.course-work.readonly', 'https://www.googleapis.com/auth/classroom.student-submissions.students.readonly', 'https://www.googleapis.com/auth/classroom.courses.readonly']

cred = None

if os.path.exists("toke.pickle"):
    with open("tiken.pickle", "rb") as token:
        cred = pickle.load(token)

if not cred or not cred.valid:
    if cred and cred.expired and cred.refresh_token:
        cred.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(CLIENTSECRETPATH, SCOPES)
        cred = flow.run_local_server()

    with open("token.pickle", "wb") as token:
        pickle.dump(cred, token)

try:
    service = build(APISERVICENAME, APIVERSION, credentials=cred)

except Exception as e:
    print(e)

Изменить: я попытался изменить некоторые настройки на консоли Google и случайно решил нажать кнопку «Опубликовать», поскольку проект все еще находился в состоянии тестирования, после чего я смог войти в систему без ошибок. Но это все еще не объясняет, почему он не работал, когда он был в статусе тестирования. Я добавил свой школьный адрес электронной почты в список тестовых пользователей и убедился, что все сделал правильно для тестирования.

снимок экрана "что-то пошло не так"


person Hein Gertenbach    schedule 21.01.2021    source источник
comment
Как я вижу в вашем коде, нет ничего, что могло бы вызвать проблему что-то пошло не так. Было бы полезно, если бы вы отредактировали свой вопрос и добавили к нему снимок экрана.   -  person Jose Vasquez    schedule 21.01.2021
comment
Я добавил скриншот "что-то пошло не так", но он не дает более подробной информации.   -  person Hein Gertenbach    schedule 22.01.2021
comment
Как я вижу на вашем снимке экрана, эта проблема может быть связана с полем redirect_uris файла credentials.json. Поэтому отредактируйте свой вопрос и добавьте этот json, не раскрывая конфиденциальные данные, такие как домен или поле client_secret.   -  person Jose Vasquez    schedule 25.01.2021
comment
Я вижу ту же проблему при попытке доступа к неподтвержденному приложению в качестве тестового пользователя домена рабочей области, и пользователь уже вошел в систему, как описано ниже @Alex. Но он работает правильно, когда я пытался использовать тестовую учетную запись с помощью общедоступной учетной записи Google (например, @ gmail.com).   -  person JozefS    schedule 02.02.2021
comment
Я могу подтвердить, что это тоже происходит со мной. Только при добавлении областей действия oauth вход в систему работает нормально. Однако использование учетной записи в домене нашей организации работает нормально.   -  person Lucas D    schedule 05.02.2021


Ответы (2)


Я не могу ответить на указанную выше проблему (мне нужна дополнительная репутация), но могу подтвердить, что наблюдаю такое же поведение. Что делает это еще более странным, так это то, что проблема возникает только тогда, когда пользователь пытается выполнить интеграцию OAuth с учетной записью, которая уже вошла в систему. Пользователь получает типичное сообщение «Извините, там что-то пошло не так. Попробуйте снова." ошибка еще до того, как увидеть список требуемых областей. Однако, если пользователь не вошел в свою учетную запись и входит в систему в рамках интеграции OAuth, то ошибки нет, и интеграция может быть успешно завершена. Тот факт, что эта проблема не затрагивает пользователей, которые не вошли в систему, показывает, что настройка (API обратного вызова, credentials.json и т. Д.) Верна. Я считаю, что эта проблема появилась примерно в последний месяц.

person Alex    schedule 26.01.2021

Я наблюдаю аналогичную проблему с сообщением Алекса. Добавление того, что я видел до сих пор, в надежде помочь в отладке.

Когда поток OAuth инициируется в сеансе, в котором есть аутентифицированные учетные записи (с помощью средства выбора учетных записей), поток Oauth завершается ошибкой с /unknownerror в URL-адресе пересылки, и пользователю предоставляется общий запрос «Извините, там что-то пошло не так». Попробуйте снова.

Но если поток OAuth инициируется в сеансе, в котором пользователю необходимо войти в свою учетную запись Google, поток работает должным образом.

Я подозреваю, что это ошибка тестового приложения и тестовых учетных записей. Но надеясь, что это будет исправлено или найти какое-то обходное решение.

Я обнаружил, что прицелы тоже влияют. В базовых областях (профиль, электронная почта) поток ошибок не возникает. Но как только вы добавите еще одну более ограниченную область, поток ошибок вернется.

person spaceMonkey    schedule 02.02.2021
comment
Да, похоже, проблема с тестовым приложением и тестовыми учетными записями. Поскольку у меня есть школьная электронная почта и обычная электронная почта, в которую я вошел одновременно, это просто случайно поставило меня в такую ​​ситуацию. Моя работа заключалась в том, чтобы просто перевести проект в опубликованное состояние, поскольку я не использую какие-либо конфиденциальные области. - person Hein Gertenbach; 10.02.2021