Аутентификация для Google Directory с использованием API-ключа - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь написать скрипт, который будет добавлять учетные записи G Suite, но я хочу сделать это без перенаправления в Google для авторизации при каждой отправке формы.Есть ли способ авторизации в скрипте?Я попытался авторизоваться, используя ключ API, но получил 401 Error - Login Required

Используя oAuth и был перенаправлен в Google, работает:

from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

# If modifying these scopes, delete the file token.json.
SCOPES = 'https://www.googleapis.com/auth/admin.directory.user'

def main():



    store = file.Storage('token.json')
    creds = store.get()

    if not creds or creds.invalid:
            flow = client.flow_from_clientsecrets('creds.json', SCOPES)
            creds = tools.run_flow(flow, store)

    service = build('admin', 'directory_v1', http=creds.authorize(Http()))


    print('Adding user...')
    #create a user
    service.users().insert(body={
        "name": {
            "givenName": "John",
            "fullName": "John Smith",
            "familyName": "Smith",
            },
        "password": "password",
        "primaryEmail": "testuser@domain.com",
        "changePasswordAtNextLogin": True,
        }).execute()


if __name__ == '__main__':
    main()

Используя мой ключ API, который возвращает 401 Error

API_KEY = 'key'
def main():

    service = build('admin', 'directory_v1', developerKey=API_KEY)


    print('Adding user...')
    #create a user
    service.users().insert(body={
        "name": {
            "givenName": "John",
            "fullName": "John Smith",
            "familyName": "Smith",
            },
        "password": "password",
        "primaryEmail": "testuser@domain.com",
        "changePasswordAtNextLogin": True,
        }).execute()


if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 13 сентября 2018

Первое, что вам нужно понять, это разница между частными и общедоступными данными. Личные данные - это данные, которые принадлежат пользователю и требуют, чтобы у вас было разрешение на доступ пользователей. Публичные данные никому не принадлежат. Вы можете использовать ключ API для доступа к общедоступным данным, но не к частным данным.

если вы отметите Users: вставьте , и вы заметите, что оно указано.

Авторизация Для этого запроса требуется авторизация в следующей области (подробнее об аутентификации и авторизации).

Scope https://www.googleapis.com/auth/admin.directory.user

Так что это метод, который требует аутентификации. У вас есть два варианта Oauth2 и запросить доступ пользователя или использовать служебную учетную запись. Учетная запись службы похожа на фиктивного пользователя, этому фиктивному пользователю предоставляется доступ через деликатность по всему домену . Обычно он используется для обмена данными между серверами, где нет пользователя для аутентификации кода. Я предлагаю вам посмотреть на это.

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