更新JHipster应用程序

时间:2018-01-04 14:43:06

标签: oauth oauth-2.0 token jhipster access-token

我使用Angular4 / Spring处理JHipster生成的应用程序。

当我登录应用程序时,我可以将API调用1800秒。 但是,当我运行请求时,我的令牌的到期日期应该重置,并且在此之后我不应该断开连接。

在我的表格oauth_client_details中,我有1800个字段access_token_validityrefresh_token_validity

是否还有其他设置才能正确更新令牌?

2 个答案:

答案 0 :(得分:0)

这是使用刷新令牌刷新会话持续时间的技巧。

auth-oauth2.service.ts 中,替换 authSuccess()函数并添加 refresh()

authSuccess(resp) {
    const response = resp.json();
    const expiredAt = new Date();
    expiredAt.setSeconds(expiredAt.getSeconds() + response.expires_in);
    response.expires_at = expiredAt.getTime();
    this.$localStorage.store('authenticationToken', response);
    if (this.refreshSubcription !== null) {
        // cancel previous refresh
        this.refreshSubcription.unsubscribe();
    }

    // refresh token 5 seconds before expiration
    this.refreshSubcription = Observable
            .timer((response.expires_in - 5) * 1000 )
            .take(1)
            .subscribe(() => this.refresh());

    return response;
}

refresh() {
    const data = 'refresh_token=' + this.getToken().refresh_token + '&grant_type=refresh_token&scope=read%20write&' +
        'client_secret=<SECRET-TOKEN>&client_id=<CLIENT-ID>';
    const headers = new Headers({
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json',
        'Authorization': 'Bearer ' + this.getToken().access_token
    });

    this.http
        .post('oauth/token', data, {headers})
        .map(this.authSuccess.bind(this))
        .subscribe();
}

请记住相应地修改 logout()和login()方法。

login(credentials): Observable<any> {
    const data = 'username=' + encodeURIComponent(credentials.username) + '&password=' +
        encodeURIComponent(credentials.password) + '&grant_type=password&scope=read%20write&' +
        '<SECRET-TOKEN>&client_id=<CLIENT-ID>';
    const headers = new Headers({
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json',
        'Authorization': 'Basic ' + this.base64.encode('<CLIENT-ID>' + ':' + '<SECRET-TOKEN>')
    });

    return this.http
                .post('oauth/token', data, {headers})
                .map(this.authSuccess.bind(this));
}

logout(): Observable<any> {
    if (this.refreshSubcription !== null) {
        // cancel previous refresh
        this.refreshSubcription.unsubscribe();
    }
    return new Observable((observer) => {
        this.http.post('api/logout', {});
        this.$localStorage.clear('authenticationToken');
        observer.complete();
    });
}

答案 1 :(得分:0)

我与JHipster生成器 4.6.0 一起使用,如果对某人有效,我可以在 application.yml 中进行这些更改,然后为我工作。

jhipster:
    security:
        authentication:
            oauth:
                # Token is valid 1 day
                token-validity-in-seconds: 86400