Как в Python вы используете ключ домена Google Apps для подключения к Google API?

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

Я использую объекты OAuth2WebServerFlow, Credentials и Storage, как описано здесь: https://developers.google.com/api-client-library/python/guide/aaa_oauth

flow = OAuth2WebServerFlow(client_id="domain.com",
                           client_secret=<Consumer Secret>,
                           scope='https://www.googleapis.com/auth/calendar')

Но я просто получаю сообщение об ошибке «invalid_client», когда захожу на сайт для аутентификации.

Есть ли у кого-нибудь советы, как заставить это работать? У меня нет проблем с получением ключей OAuth, которые я генерирую из консоли API. Но я борюсь с ключом домена, в частности. Есть ли что-то особенное, что вы должны сделать?


person Daniel Wren    schedule 25.03.2013    source источник


Ответы (2)


Это для OAuth 2.0, поэтому вам нужен фактический идентификатор клиента, а не ваш домен. (Кажется, вы немного путаете это с OAuth 1.0, но, возможно, я неправильно понимаю.)

Ознакомьтесь с документами консоли API Google для получения дополнительной информации о том, что такое идентификатор клиента и где Вы можете найти это.

person bossylobster    schedule 26.03.2013
comment
Привет, спасибо за ваш ответ. Я понимаю, что такое идентификатор клиента, а ключ домена в GAB — это идентификатор клиента. Я пытаюсь выяснить, как подключиться с его помощью. - person Daniel Wren; 27.03.2013
comment
Похоже, что TwoLeggedOAuthCredentials больше не существует. Я не могу найти его в google-api-python-client v1.1. - person Daniel Wren; 27.03.2013
comment
Извините за спам в комментариях здесь. Странно, что нельзя редактировать комментарий через 5 минут. Мой предыдущий комментарий относится к этой странице, где объясняется, как делать то, что я хочу, за исключением того, что я не могу заставить его работать, потому что не могу найти TwoLeggedOAuthCredentials. developers.google.com/google-apps/ помощь/статьи/ - person Daniel Wren; 27.03.2013
comment
Да, и в статье упоминается двухсторонний OAuth 1.0. Как я уже сказал, мы не поддерживаем OAuth 1.0; он устарел в пользу OAuth 2.0. - person bossylobster; 27.03.2013
comment
Итак, я должен использовать OAuth 2.0 для подключения с использованием ключа домена? Если да, то как мне это сделать? Всякий раз, когда я пытаюсь это сделать с помощью OAuth2WebServerFlow, я получаю страницу с сообщением invalid_client. Если я упустил что-то очевидное, прошу прощения. Но кажется, что устаревший способ документирован намного лучше, чем не устаревший. - person Daniel Wren; 27.03.2013
comment
Возможно, невозможно использовать ключ домена GAB в OAuth 2.0, потому что вместо этого вы используете учетную запись службы? Использование ключа домена доступно только в OAuth 1.0? - person Daniel Wren; 27.03.2013
comment
Да, сервисные аккаунты — это ваш путь. - person bossylobster; 27.03.2013
comment
На самом деле я пытаюсь использовать учетную запись службы, но сталкиваюсь с странной проблемой, когда внешние участники вставленных событий приводят к ее взрыву ... поэтому я искал альтернативы. stackoverflow.com/questions/15619763/ - вы видели это раньше? - person Daniel Wren; 27.03.2013

Используйте SignedJwtAssertionCredentials и укажите пользователя, которого вы хотите олицетворять, с помощью параметра 'prn':

http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.client.SignedJwtAssertionCredentials-class.html

https://developers.google.com/accounts/docs/OAuth2ServiceAccount#formingclaimset

http://support.google.com/a/bin/answer.py?hl=ru&answer=162106

person Joe Gregorio    schedule 29.03.2013
comment
Однако это не работает для ключа домена GAB. Я спросил конкретно о ключе домена, с уважением. - person Daniel Wren; 29.03.2013
comment
Как уже указал вам bossylobster, ключ домена GAB — это OAuth 1.0, и он устарел. Ссылки, которые я вам дал, объясняют, как сделать то же самое с помощью OAuth 2.0. - person Joe Gregorio; 29.03.2013
comment
@JoeGregorio prn устарел в пользу sub. Значение prn использовалось Google до того, как спецификация стала окончательной, и теперь оно является окончательным. Насколько я знаю, оба варианта работают, но будущее за sub, а не за prn. - person bossylobster; 29.03.2013