2017-10-12 3 views
0

id_token 및 access_token을 생성하기 위해 ng2-adal npm lib를 사용하고 있습니다. id_token과 access_token이 각각 30 분과 60 분 동안 유효하기 때문에 백그라운드에서 20 분마다 id_token을 새로 고치는 방법을 찾아야합니다. 이를 수행하는 한 가지 방법은 다음과 같습니다.클라이언트 측 Refresh id_token : 각도 4

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

Adal 서비스 로그인 방법은 토큰을 다시 생성하여 브라우저 로컬 저장소에 저장합니다. 그러나 모든 토큰 재생성과 함께 응용 프로그램을 새로 고칩니다. 그렇다면 어떻게 든 앱을 새로 고치지 않고 사용자의 지식으로 백그라운드에서 토큰을 새로 고치는 것을 피할 수 있습니까?

답변

1

응용 프로그램을 새로 고치지 않으려면 adal.js library id_token을 갱신하는 것과 같은 방법으로 iframe에서 동일한 코드를 실행할 수 있습니다. 라이브러리는 _renewIdToken 방법을 제공하지 않습니다 당신은 또한이 기능을 원하는 경우, 당신은 its project site of GitHub에서 의견을 제출할 수있다 그러나 ng2-adal

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); 
}; 

.

관련 문제