Получение токена доступа - PullRequest
       67

Получение токена доступа

0 голосов
/ 30 декабря 2018

Я использую паспорт для аутентификации пользователя в моем приложении

Я создал стратегию паспорта для той же

passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    callbackURL:  process.env.GOOGLE_CALLBACK_URL,
    userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo',
    accessType: 'offline'
  }, (accessToken, refreshToken, profile, cb) => {
       console.log(refreshToken)
        let profileSort = extractProfile(profile)
         mongooeHelperFunction.findUserByEmail(profileSort.email).then(response => {
           if (!response) {
            mongooeHelperFunction.createNewUser(profileSort)
            .then(res => { 
               let newRes = {...res}
                newRes["accessToken"] = accessToken
                cb(null, newRes)
            })
            .catch(error => {  throw error  })
           } else {
                let newRes = {...response}
                newRes["accessToken"] = accessToken
                cb(null, newRes)
           }
        })
        .catch(error => {  throw error  })
    }
))

(вышеприведенное очень похоже на стратегию паспорта, которую мы обычно создаем)

Чтобы получить токен обновления выше, я делаю это в своем маршруте API

router.get("/google",  passport.authenticate('google', {accessType: 'offline', prompt: 'consent', scope: ['profile', 'email',  'https://mail.google.com/' ] }));

Вопрос: Это дает мне токен доступа.Как я могу узнать, когда истечет срок действия токена доступа?

Моя первоначальная цель - получить новый токен доступа с помощью токена обновления при каждом истечении срока действия токена доступа.

Кто-нибудь может мне помочь, как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Чтобы добавить к ответу выше, токены oauth2 jwt кодируются не зашифрованными, поэтому вы можете легко прочитать время истечения путем декодирования токена.Существует два распространенных способа проверить, не истек ли токен, используя стандартные библиотеки jwt.Я использую https://www.npmjs.com/package/jsonwebtoken

Если у вас есть открытый ключ или секрет, используйте метод verify, чтобы проверить, не истек ли токен.Это приводит к ошибке, если вы используете токен с истекшим сроком действия.

var jwt = require('jsonwebtoken');
var token ='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1NDYzOTYxMDYsImV4cCI6MTU0NjM5NjEwN30.qFeaKny2Ruk7ZeZsHGpPcw6aksyZHUfDOmb6EvgiGIo';
var verified = jwt.verify(token, 'secret');

Декодируйте токен с помощью метода decode.Вы можете получить время истечения из поля exp в декодированном объекте

var jwt = require('jsonwebtoken');
var token ='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1NDYzOTYxMDYsImV4cCI6MTU0NjM5NjEwN30.qFeaKny2Ruk7ZeZsHGpPcw6aksyZHUfDOmb6EvgiGIo';
var decoded = jwt.decode(token);
console.log('Expiry timestamp----------->', decoded.exp);

Также для проверки этого убедитесь, что вы установили время истечения при создании JWT

var jwt = require('jsonwebtoken');
var token = jwt.sign({ foo: 'bar' }, 'secret', {expiresIn: '1h'});

Вы можете прочитатьбольше о JWT здесь https://jwt.io/introduction/

0 голосов
/ 31 декабря 2018

Токены OAuth содержат всю информацию в них в зашифрованном виде.Они являются формой токенов JWT, и вы можете легко расшифровать свой токен здесь .

В программных целях вы можете анализировать JWT с помощью ppm-пакетов npm.Одна из лучших реализаций - Auth0 , и это должно помочь вам избежать написания алгоритмов ручного дешифрования.

...