Я пытаюсь использовать Google OAuth2 для получения контактной информации пользователя. Я не борюсь с получением доступа, мне интересно, что по какой-то причине я перестал получать refresh_token
, вместо этого я получаю id_token
(длинная строка JWT). Я использую python urllib
для получения информации о доступе для пользователей. Мой код:
scope = 'https://accounts.google.com/o/oauth2/token'
params = urllib.urlencode({
'code': request.GET['code'],
'redirect_uri': settings.SOCIAL_AUTH_GOOGLE_REDIRECT_URI,
'client_id': settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY,
'client_secret': settings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET,
'grant_type': 'authorization_code',
})
Ответ:
{u'access_token': u'hash',
u'token_type': u'Bearer',
u'expires_in': 3600,
u'id_token': u'really long hash'}
Я использую область контактов https://www.google.com/m8/feeds/contacts/default/full?alt=json
Когда я пытаюсь добавить в параметры access_type : offline
, я получаю сообщение об ошибке ниже:
Failed to retrive access_token. Status: 400
Message: {
"error" : "invalid_request",
"error_description" : "Parameter not allowed for this message type: access_type"
}
Итак, после этого я задаюсь вопросом:
- Могу ли я использовать
id_token
для обновления моегоaccess_token
? - Если сначала
True
: Как? - Существуют ли какие-либо различия между типами пользователей, которые проходят аутентификацию, потому что я заметил, что иногда вы получаете
refresh_token
, но мне нужно получить его постоянно, в следующий раз, когда я создам поток OAuth2, я получуid_token