Я обновляю проект python App Engine от старого API администратора Google Admin до нового и с трудом получаю аутентификацию (AppAssertionCredentials).Получение AppAngine AppAssertionCredentials работает (Python)?
Я уже
- Включено в API администратора SDK в консоли разработчиков
- Enabled доступ API в панели управления Служб Google
Чтобы обойти эту проблему, я создал учетную запись службы от Консоли разработчиков, загрузите учетные данные.json и установите следующие разрешения (без кавычек) в панели управления Google Apps (Security> Дополнительные настройки> Manage API client access) для этой учетной записи:
- клиент: "{учетная запись службы идентификатор} .apps.googleusercontent.com"
- разрешения: "https://www.googleapis.com/auth/admin.directory.user.readonlyhttps://www.googleapis.com/auth/admin.directory.group.readonlyhttps://www.googleapis.com/auth/admin.directory.group.member.readonly"
Мой текущий код (слегка отредактированный)
# ...
import json
from google.appengine.api import memcache
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials
GAPPS_CREDENTIALS = 'credentials.json'
GAPPS_SCOPES = [
'https://www.googleapis.com/auth/admin.directory.user.readonly',
'https://www.googleapis.com/auth/admin.directory.group.readonly',
'https://www.googleapis.com/auth/admin.directory.group.member.readonly'
]
GAPPS_ADMIN = 'admin'
GAPPS_DOMAIN = 'domain.com'
GAPPS_USER = 'user'
# ...
with open(GAPPS_CREDENTIALS) as jsonfile:
jsondata = json.load(jsonfile)
credentials = SignedJwtAssertionCredentials(
jsondata['client_email'],
jsondata['private_key'],
scope=GAPPS_SCOPES,
sub=GAPPS_ADMIN+'@'+GAPPS_DOMAIN
)
http = credentials.authorize(Http(memcache))
apps = build('admin', 'directory_v1', http=http)
user = apps.users().get(userKey=GAPPS_USER +'@'+GAPPS_DOMAIN).execute()
console.log(user['email'])
# ...
Это работает отлично, однако, если можно, я хотел бы удалить файл credentials.json с помощью вызова AppAssertionCredentials
для аутентификации.
Как только я запускаю следующий код, однако:
# ...
import json
from google.appengine.api import memcache
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client.appengine import AppAssertionCredentials
GAPPS_CREDENTIALS = 'credentials.json'
GAPPS_SCOPES = [
'https://www.googleapis.com/auth/admin.directory.user.readonly',
'https://www.googleapis.com/auth/admin.directory.group.readonly',
'https://www.googleapis.com/auth/admin.directory.group.member.readonly'
]
GAPPS_ADMIN = 'admin'
GAPPS_DOMAIN = 'domain.com'
GAPPS_USER = 'user'
# ...
credentials = AppAssertionCredentials(scope=GAPPS_SCOPES,sub=GAPPS_ADMIN+'@'+GAPPS_DOMAIN)
http = credentials.authorize(Http(memcache))
apps = build('admin', 'directory_v1', http=http)
user = apps.users().get(userKey=GAPPS_USER +'@'+GAPPS_DOMAIN).execute()
console.log(user['email'])
# ...
Я получаю 403 ошибку:
<HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/users/user%domain.com?alt=json returned "Not Authorized to access this resource/api">
Я подозреваю, что проблема может быть, что встроенная учетная запись службы не аутентифицирован в Google Apps Dashboard, однако я не могу найти домен учетной записи либо в Консоли разработчика, либо в консоли App Engine, чтобы иметь возможность добавлять эти разрешения. Я пробовал:
- добавить все учетные записи служб, найденные при Developers Console> Права доступа, изменение @ developer.gserviceaccount.com к .apps.googleusercontent.com (@ cloudservices.gserviceaccount.com счет вызывает ошибку:
This client name has not been registered with Google yet.
) - с помощью {} проекта .appspot.com домена Служб Google ошибки с
This client name has not been registered with Google yet.
Может кто-нибудь пролить свет?
Благодаря
Вы когда-нибудь находили решение этого? Я нахожусь в одной лодке - могу использовать автономный файл секретов, но независимо от того, сколько раз я просматриваю браузер через https://developers.google.com/identity/protocols/OAuth2ServiceAccount и связанные ссылки, я не могу найти имя клиента, которое работает для учетной записи службы по умолчанию. – Bill
К сожалению, не нужно было использовать файл credentials.json. –