Почему мой запрос на новый токен доступа не возвращает новый токен обновления?
Я использую следующий код вместе с моим токеном обновления, чтобы запросить новый токен доступа:
exports.getTokenFromRefreshToken = function (user, callback) {
request.post({
url:'https://login.microsoftonline.com/12345678-1234-1234-1234-2f189712345/oauth2/token',
form: {
grant_type: 'refresh_token',
refresh_token: refresh_token,
client_id: client_id,
client_secret: client_secret,
resource: 'https://graph.microsoft.com'
}
}, function(err, httpResponse, body) {
if (!err) {
var tokens = JSON.parse(httpResponse.body);
console.log('getTokenFromRefreshToken() tokens = ' + JSON.stringify(tokens));
callback(null, tokens);
}
})
};
httpResponse
включает в себя все, что я получаю, когда делаю оригинальный запрос токена (из code
), но без нового токена обновления. У меня сложилось впечатление, что я также получу новый токен обновления. Разве это не так?
4 ответа
Вы получаете новый токен обновления только тогда, когда вы включаете область offline_access.
ссылка: https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-scopes/
Область offline_access предоставляет вашему приложению доступ к ресурсам от имени пользователя в течение длительного времени. На странице согласия рабочей учетной записи эта область отображается как разрешение "Доступ к вашим данным в любое время". На персональной странице согласия учетной записи Microsoft оно отображается как разрешение "Доступ к вашей информации в любое время". Когда пользователь утверждает область offline_access, ваше приложение может получать токены обновления из конечной точки токена v2.0. Жетоны обновления являются долгоживущими. Ваше приложение может получить новые токены доступа по мере истечения срока действия старых.
Токены обновления не обновляются так же, как вы можете получить новый токен доступа, используя токен обновления. Когда срок действия обновленного токена истечет, вам потребуется получить учетные данные и снова выполнить первоначальное получение токена.
Более подробная информация здесь: Обновление токена доступа
У меня была точно такая же проблема, некоторое время вызывающая головную боль, пока проблема не была найдена.
Похоже, что вы, вероятно, входите в систему с учетной записью гостевой MS (ранее известной как Live) и, таким образом, получаете жетон обновления с истечением 12 часов без пролонгированного окна.
Вам нужно использовать полную учетную запись MS, чтобы получить токен обновления в теле ответа (который будет длиться 14 дней) с пролонгированным окном 90 дней.
Пока вы используете гостевой MSA, вы не получите токен обновления. Насколько я вижу, ваш код правильно структурирован, и я не верю, что вам нужен заголовок redirect_uri, как указано выше, это необязательные поля в соответствии с doco.
Для получения дополнительной информации о типах токенов обновления см. Этот пост в блоге:
Похоже, что это должно работать, за исключением того, что вы, кажется, пропустили URI перенаправления. У меня есть рабочая версия этого вызова, но он включает в себя этот redirect_uri. Он производит для меня как новый доступ, так и токен обновления.
-
http://graph.microsoft.io/en-us/docs/authorization/app_authorization
Продлить токен доступа с истекшим сроком действия, используя токен обновления
URL перенаправления, на который браузер отправляется после завершения аутентификации. Это должно соответствовать значению redirect_uri, используемому в первом запросе.