javascript - 客户端刷新id_token : Angular 4

标签 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服务登录方法将重新生成 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/

相关文章:

javascript - ng2-smart-table 删除后不绑定(bind)

Angular - 如何在应用程序组件中获取当前 url

iPhone 认证流程

javascript - 为什么拼接不填充 javascript 数组上的孔?

javascript - 在单击按钮之前加载内容

javascript - 单击 td 时转换为下拉框并将更改保存到数据库

jQuery 默认/占位符输入文本和保存信息的问题

javascript - 为什么modal弹出按空格键会按?我该如何预防?

angular - 从 google.maps.event.listener 调用我的函数

authentication - 创建服务器证书时出错 - 在 IBM Worklight 6.2 中基于 X509 证书的身份验证