Я пытаюсь создать приложение фляги на 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)
Любая подсказка будет полезна.