Описание: Аутентификация веб-приложений с помощью 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 и все работает.