Использование Google OAuth на localhost - PullRequest
17 голосов
/ 02 октября 2011

Я начал использовать OAuth с Python и Django. Мне это нужно для API Google. Я работаю на localhost, поэтому я не могу зарегистрировать домен для URL-обратного вызова. Я читал о том, что Google OAuth можно использовать с анонимным доменом. Не могу найти, как и где я могу это сделать?

Edit:

У меня есть этот вид:

def authentication(request):
    CONSUMER_KEY = 'xxxxx'
    CONSUMER_SECRET = 'xxxxx'
    SCOPES = ['https://docs.google.com/feeds/', ]

    client = gdata.docs.client.DocsClient(source='apiapp')
    oauth_callback_url = 'http://%s/get_access_token' % request.META.get('HTTP_HOST')
    request_token = client.GetOAuthToken(
      SCOPES, oauth_callback_url, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET)
   domain = '127.0.0.1:8000'
   return HttpResponseRedirect(
        request_token.generate_authorization_url(google_apps_domain=domain))

И эта ошибка:

Извините, вы попали на страницу входа в домен, который не использует Google Apps. Пожалуйста, проверьте веб-адрес и попробуйте снова.

Зарегистрирован через https://code.google.com/apis/console/

Edit:

CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
SCOPES = ['https://docs.google.com/feeds/', ]
DOMAIN = 'localhost:8000'


def authentication(request):    
    client = gdata.docs.client.DocsClient(source='apiapp')
    oauth_callback_url = 'http://%s/get_access_token' % DOMAIN

    request_token = client.GetOAuthToken(SCOPES,
                                     oauth_callback_url,
                                     CONSUMER_KEY,
                                     consumer_secret=CONSUMER_SECRET)

    return HttpResponseRedirect(
        request_token.generate_authorization_url())


def verify(request):
    client = gdata.docs.client.DocsClient(source='apiapp')
    f = open('/home/i159/.ssh/id_rsa')
    RSA_KEY = f.read()
    f.close()

    oauth_callback_url = 'http://%s/get_access_token' % DOMAIN

    request_token = client.GetOAuthToken(SCOPES,
                                     oauth_callback_url,
                                     CONSUMER_KEY,
                                     rsa_private_key=RSA_KEY)
    return HttpResponseRedirect(
        request_token.generate_authorization_url(google_apps_domain=DOMAIN))

Ошибка:

Невозможно получить токен запроса OAuth: 400, у клиента нет сертификата: xxxxxxxxxxxxxxx.apps.googleusercontent.com

Ответы [ 3 ]

11 голосов
/ 03 октября 2011

Просто чтобы прояснить ситуацию, вы можете использовать поток веб-приложений с localhost при разработке на OAuth 1.0 или OAuth 2.0.OAuth 2.0 должен быть предпочтительным, так как это механизм, на котором мы сосредоточены.Пользовательский интерфейс для OAuth 2.0 будет значительно лучше.

Ничто не мешает вам использовать localhost в качестве URL обратного вызова.Я делаю это сам все время.Вам просто нужно убедиться, что URL обратного вызова точно совпадает, включая любые номера портов, и вы не можете развернуть свое приложение таким образом по очевидным причинам.Установленные приложения более сложны, но если вы что-то делаете с Django, можно воспользоваться тем фактом, что OAuth 2.0 является системой с токеном-носителем.Пока вы храните токен обновления на стороне сервера, вы можете проходить аутентификацию с вашим собственным приложением вне диапазона, а затем отправлять маркер носителя установленному приложению.У вашего установленного приложения будет примерно одночасовое окно для звонков, прежде чем вам нужно будет повторить процесс.Это может происходить прозрачно для пользователя в большинстве случаев.Передача токена-носителя должна происходить по зашифрованному каналу.

2 голосов
/ 02 октября 2011

OAuth 1.0 для Установленные приложения

Кроме того, вы, вероятно, не хотите включать свои действительные значения CONSUMER_KEY и CONSUMER_SECRET в пример кода.

1 голос
/ 02 октября 2011

Попробуйте свой код без аргументов:

return HttpResponseRedirect(request_token.generate_authorization_url())
...