Обновление токена JWT в Passportjs - PullRequest
11 голосов
/ 30 апреля 2019

Я использую стратегию passport-openidconnect, которая работает хорошо, но срок действия сессии короткий 3600 секунд, и я не думаю, что она может быть изменена.

Буду ли я использовать токен обновления, чтобы получить другой идентификатор токена?

Если бы я сделал, куда бы я добавил эту логику примерно так?https://github.com/passport/express-4.x-openidconnect-example/blob/master/server.js

1 Ответ

4 голосов
/ 03 мая 2019

Срок действия сеанса настраивается со стороны провайдера аутентификации.Например, предположим, что вы используете auth0 в качестве поставщика аутентификации, вы можете настроить token таймаут в настройках приложения (https://auth0.com/docs/tokens/guides/access-token/set-access-token-lifetime)

enter image description here

Что касается refresh token, то сам паспорт не поддерживает его, и мы должны его реализовать. Для auth0 вы можете обновить токен, следуя потоку в https://auth0.com/docs/tokens/refresh-token/current. Я вставилкод по этой ссылке:

var request = require("request");

var options = { method: 'POST',
  url: 'https://YOUR_DOMAIN/oauth/token',
  headers: { 'content-type': 'application/x-www-form-urlencoded' },
  form: 
   { grant_type: 'refresh_token',
     client_id: 'YOUR_CLIENT_ID',
     client_secret: 'YOUR_CLIENT_SECRET',
     refresh_token: 'YOUR_REFRESH_TOKEN' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

ИЛИ вы можете использовать дополнение к паспорту https://github.com/fiznool/passport-oauth2-refresh

var passport = require('passport'),
  , refresh = require('passport-oauth2-refresh')
  , FacebookStrategy = require('passport-facebook').Strategy;

var strategy = new FacebookStrategy({
  clientID: FACEBOOK_APP_ID,
  clientSecret: FACEBOOK_APP_SECRET,
  callbackURL: "http://www.example.com/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
  // Make sure you store the refreshToken somewhere!
  User.findOrCreate(..., function(err, user) {
    if (err) { return done(err); }
    done(null, user);
  });
});

passport.use(strategy);
refresh.use(strategy);

var refresh = require('passport-oauth2-refresh');
refresh.requestNewAccessToken('facebook', 'some_refresh_token', function(err, accessToken, refreshToken) {
  // You have a new access token, store it in the user object,
  // or use it to make a new request.
  // `refreshToken` may or may not exist, depending on the strategy you are using.
  // You probably don't need it anyway, as according to the OAuth 2.0 spec,
  // it should be the same as the initial refresh token.

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...