Как избежать появления всплывающего окна для выбора электронной почты, когда вы используете oauth2 в python? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь создать приложение фляги на AWS lambda, которому необходим доступ к https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly, чтобы получить Mac-адрес устройств chrome по имени домена и идентификатору устройства chrome.

В основном рабочий поток задул: Расширение Chrome, развернутое G-Suit, отправляет запрос с именем домена и идентификатором устройства в AWS (так как мы используем AWS), затем AWS отправляет запрос с именем домена и идентификатором устройства в Google Cloud для получения адреса Mac.

Я начал с использования API доступа к каталогу в качестве учетной записи службы, такой как service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES, subject="username@domainName.com"), и это работает. Однако я понял, что это неправильная реализация, так как имя домена будет изменено, и subject будет отличаться для каждого домена, так как расширение Chrome может быть развернуто через разные домены.

Затем я начал использовать пример кода из Google (https://developers.google.com/api-client-library/python/auth/web-app),) и смог получить доступ к домену и получить Mac-адрес каждого устройства.

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

Так возможно ли, что мы просто используем имя_домена вместо того, чтобы выбирать электронную почту для аутентификации и доступа к различным каталогам? Если да, то есть ли примеры или документы, которые мне нужно прочитать?

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

@app.route('/adminlogin')
def authorize():
  # Create flow instance to manage the OAuth 2.0 Authorization Grant Flow steps.
  flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
      CLIENT_SECRETS_FILE, scopes=SCOPES)

  flow.redirect_uri = flask.url_for('oauth2callback', _external=True)

  authorization_url, state = flow.authorization_url(
      # Enable offline access so that you can refresh an access token without
      # re-prompting the user for permission. Recommended for web server apps.
      access_type='offline',
      approval_prompt="force",
      # Enable incremental authorization. Recommended as a best practice.
      #include_granted_scopes='true'
      )
  # Store the state so the callback can verify the auth server response.
  flask.session['state'] = state

  return flask.redirect(authorization_url)

Любая подсказка будет полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...