2

Я хочу импортировать контакты пользователя Gmail через API Google.Как получить токен доступа и обновить токен после входа и согласия пользователя в Google OAuth2?

У меня есть следующие:

  1. Использование Client secret and key для получения авторизованного URL. Это URL-адрес, который пользователь посещает, чтобы разрешить разрешение для моего приложения.

  2. Уполномоченный URL перенаправляет на перенаправление uri, указанное в настройках приложения.

  3. У меня есть параметр запроса code в URL-адресе, и я предполагаю, что это Уполномоченный код, который говорит docs here.

Проблема:

Я хочу обменять этот код, чтобы получить access token и refresh token через javascript, если это возможно. Но я не вижу никаких документов для этой части в javascript.

В моей стороне сервера я делаю это, чтобы получить authorized url:

token = gdata.gauth.OAuth2Token(client_id=settings.GMAIL_CLIENT_ID, 
           client_secret=settings.GMAIL_API_KEY, 
           scope=scope, user_agent=user_agent) 

auth_url = token.generate_authorize_url(redirect_uri=redirect_uri) 

, а затем перенаправляет пользователя auth_url. Теперь, когда пользователь разрешает запрашиваемые разрешения, они перенаправляются обратно на мой сайт с параметром запроса code. Я хочу использовать javascript отсюда, чтобы получить access token.

Другой вариант - получить access token на стороне сервера, как только пользователь будет перенаправлен на мой сайт и вернет его ему вместе с ответом, но я действительно не хочу этого делать.

+0

ли решить вашу проблему вы? У меня такая же проблема. –

ответ

0

Короткий ответ: если вы хотите использовать аутентификацию на стороне клиента OAuth2, вы используете неправильную документацию.

Теперь детали.

OAuth2 имеет 4 вида грантов:

  1. код авторизации,
  2. неявной,
  3. ресурсов Владелец Пароль Полномочия и
  4. учетные данные клиента

Если вы хотите получить более подробную информацию, вы можете прочитать this nice post с пояснениями.

Вы указали документы Google для OAuth2 for Web Servers, который соответствует Код авторизации.Он полагается на обмен данными через Web Server через SSL, поскольку он включает обмен client_secret.

I.e, если вы попробуете сделать запрос POST, чтобы получить access_token с помощью JavaScript, вы можете разоблачить свой client_secret, так как это необходимый параметр в вызове POST.

Если вы хотите, попробуйте запросить access_token, не используя код на стороне сервера, вам необходимо использовать тип субсидирования Implicit.

Вы можете найти Google документацию для неявного типа гранта в Using OAuth 2.0 for Client-side Applications

Смежные вопросы