2017-10-12 5 views
0

J'utilise ng2-adal npm lib pour générer id_token et access_token. Puisque id_token et access_token sont valides respectivement 30 minutes et 60 minutes, j'essaie de trouver un moyen de rafraîchir le id_token toutes les 20 minutes en arrière-plan. Une façon de faire cela pourrait être:Actualiser id_token côté client: Angular 4

setTimeout(() => { 
    this.adalService.login(); 
}); 

Adal méthode de connexion service régénérera le jeton et enregistrez-le navigateur de stockage local. Mais, avec chaque régénération de jeton, il rafraîchira également l'application. Alors, est-ce que je peux d'une manière ou d'une autre éviter d'actualiser l'application et juste de rafraîchir le jeton en arrière-plan avec la connaissance de l'utilisateur?

Répondre

1

Si vous ne souhaitez pas actualiser l'application, vous pouvez exécuter le même code dans une iframe, tout comme la méthode adal.js library permet de renouveler l'id_token.

AuthenticationContext.prototype._renewIdToken = function (callback) { 
    // use iframe to try refresh token 
    this.info('renewIdToken is called'); 
    var frameHandle = this._addAdalFrame('adalIdTokenFrame'); 
    var expectedState = this._guid() + '|' + this.config.clientId; 
    this._idTokenNonce = this._guid(); 
    this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN, this._idTokenNonce); 
    this.config.state = expectedState; 
    // renew happens in iframe, so it keeps javascript context 
    window.renewStates.push(expectedState); 

    this.verbose('Renew Idtoken Expected state: ' + expectedState); 
    var urlNavigate = this._getNavigateUrl('id_token', null) + '&prompt=none'; 
    urlNavigate = this._addHintParameters(urlNavigate); 

    urlNavigate += '&nonce=' + encodeURIComponent(this._idTokenNonce); 
    this.registerCallback(expectedState, this.config.clientId, callback); 
    this.idTokenNonce = null; 
    this.verbose('Navigate to:' + urlNavigate); 
    frameHandle.src = 'about:blank'; 
    this._loadFrameTimeout(urlNavigate, 'adalIdTokenFrame', this.config.clientId); 
}; 

Cependant, la ng2-adal la bibliothèque ne fournit pas la méthode _renewIdToken, si vous souhaitez également cette fonction, vous pouvez soumettre les commentaires du its project site of GitHub.