我正在使用 ng2-adal npm lib 生成 id_token 和 access_token。由于 id_token 和 access_token 的有效期分别为 30 分钟和 60 分钟,因此我试图想出一种在后台每 20 分钟刷新一次 id_token 的方法。一种方法可能是:
setTimeout(() => {
this.adalService.login();
});
Adal服务登录方法将重新生成 token 并将其保存到浏览器本地存储。但是,每次 token 重新生成时,它也会刷新应用程序。那么,我可以以某种方式避免刷新应用程序,而只是在用户知情的情况下在后台刷新 token 吗?
最佳答案
如果您不想刷新应用程序,您可以在 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提交反馈.
关于javascript - 客户端刷新id_token : Angular 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720542/