在客户端刷新id_token:Angular 4

时间:2017-10-12 23:52:20

标签: javascript angular authentication adal

我使用ng2-adal npm lib生成id_token和access_token。由于id_token和access_token分别有效30分钟和60分钟,我试图在后台每隔20分钟尝试刷新一次id_token。一种方法可能是:

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

Adal Service登录方法将重新生成令牌并将其保存到浏览器本地存储。但是,随着每个令牌的重生,它也会刷新应用程序。那么,我可以以某种方式避免刷新应用程序,只是在用户的知识背景下刷新令牌吗?

1 个答案:

答案 0 :(得分:1)

如果您不想刷新应用程序,可以在iframe中运行相同的代码,就像adal.js library续订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);
};

但是,ng2-adal图书馆未提供_renewIdToken方法,如果您还需要此功能,则可以提交its project site of GitHub的反馈。