Found misprint?

Select it with the mouse and hit Enter

Ctrl-Enter
Processed:
38 1 199 25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 638
Русская группа
на Google
на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!

ЯМ:41001223475816

Доступ к Google API через AuthSubRequest

Разное

Описание: Аутентификация веб-приложений с помощью AuthSub

1) Регестриурем домен Authentication and Authorization for Google APIs. Зачем это нужно? Если не подписывать запросы и вообще не регестрировать домен - гугл покажет страшный варнинг юзеру, что вам нельзя доверять.

2) Генерим сертификат безопасности

$ openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -sha1 -subj '/C=US/ST=CA/L=Mountain View/CN=www.example.com' -keyout   myrsakey.pem -out myrsacert.pem

Подробнее тут Generating a self-signing private key and public certificate for use with secure AuthSub. --days - срок действия сертификата. -subj - что угодно, в данном примере предполагается, что ваша компания находится в Калифорнии Mountain View и сайт компании www.example.com.

3) myrsacert.pem добавляем в Google Account для нашего домена. Можно добавить при регистрации домена. 4) cодержимое myrsakey.pem это наш GOOGLE_RSA_KEY, можно в settings сделать так

GOOGLE_RSA_KEY = open('myrsakey.pem').read()

5) Генерим урл для редиректа юзера.

from gdata.service import GenerateAuthSubRequestUrl

scope = 'https://www.google.com/analytics/feeds'
next = u'http://%s%s' % (request.get_host(), reverse('access-analytics'))
google_auth_url = GenerateAuthSubRequestUrl(next, scope, secure=True, session=True)

access-analytics название представления, куда Google перенаправит пользователя. scope указывает к чему конкретно мы хотим получить доступ. Другие значения смотрите тут.

6) Теперь создаем респонс для редиректа юзера и "подписываем" его нашим ключем.

from gdata.auth import SecureAuthSubToken
from django.shortcuts import redirect

secure_token = SecureAuthSubToken(GOOGLE_RSA_KEY)
auth_header = secure_token.GetAuthHeader('GET', google_auth_url)
for name, value in auth_header.items():
    response[name] = value

return response

7) После подтверждения юзером доступа, Google отредиректит его обратно к нам на "reverse('access-analytics')" и пришлет нам так называемый session_token. Его мы будем использовать для получения полноправного tokena для доступа к API. Сохраняем session_token в сессию и редиректим куда нужно. Так же его можно сохранить в БД с привязкой к юзеру или какой-то записи, что бы в будущем уже без потдверждения от юзера получать необходимую информацию.

from gdata.analytics.service import AccountsService
from gdata.auth import extract_auth_sub_token_from_url

def access_analytics(request):
    single_use_token = extract_auth_sub_token_from_url(request.build_absolute_uri(), GOOGLE_RSA_KEY)
    service = AccountsService()
    service.UpgradeToSessionToken(single_use_token)
    request.session['analytics_token'] = service.GetAuthSubToken()
    return redirect('somewhere')

8) Воспользуемся нашим token для получения данных.

from gdata.analytics.service import AccountsService
auth_token = request.session['analytics_token']
accounts_service = AccountsService()
accounts_service.SetAuthSubToken(auth_token, rsa_key=GOOGLE_RSA_KEY)
result = accounts_service.GetAccountList()
for feed_entry in result.entry:
    print feed_entry.title.text

Аналогично используем другие сервисы. Дока пишет что не все сервисы Google позволяют использовать AuthSubToken, смотрите доку. При разработке просто прописываем домен в hosts и все работает.