我使用ng2-adal npm lib生成id_token和access_token。由于id_token和access_token分别有效30分钟和60分钟,我试图在后台每隔20分钟尝试刷新一次id_token。一种方法可能是:
setTimeout(() => {
this.adalService.login();
});
Adal Service登录方法将重新生成令牌并将其保存到浏览器本地存储。但是,随着每个令牌的重生,它也会刷新应用程序。那么,我可以以某种方式避免刷新应用程序,只是在用户的知识背景下刷新令牌吗?
答案 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的反馈。