使用oidc-client的令牌到期问题?

时间:2019-07-01 17:52:53

标签: identityserver4 oidc-client-js

我有一个使用IS4的站点,前端是Angular7。我有oidc-client库来处理所有用户身份验证等,并且一切正常。不过,这是我第一次看到此问题。我可以登录并与我进行权限,角色相关的交互,一切都很好。有时,在不活动之后,我会遇到一个奇怪的错误,因此当我尝试执行安全操作时,我什至会直接得到一个错误,甚至没有碰到我的API。如果我刷新页面并执行操作,则效果很好。

我已经在我的组件中实现了silent renew callback,就像这样:

@Component({
    selector: 'app-silent-renew-callback',
    templateUrl: 'silent-renew-callback.component.html'
})
export class SilentRenewCallbackComponent implements OnInit {
    constructor(private authService: AuthService) { }

    ngOnInit() {
        this.authService.signingSilentCallback();
    }
}

然后转到authService代码:

signingSilentCallback(): Promise<void> {
        return this.manager.signinSilentCallback()
                           .catch(e => {
                               console.log(e);
                           });
    }

我的身份验证服务事件配置如下:

@Injectable()
export class AuthService {
    private manager: UserManager;
    private user: User = null;

    constructor() {
        if (!environment.production) {
            Log.logger = console;
        }
        this.manager = new UserManager(getClientSettings());

        this.manager.getUser()
                    .then(user => {
                        this.user = user;
                    });

        this.manager.events.addUserSignedOut(() => {
            this.signOut();
        });

        this.manager.events.addAccessTokenExpired(() => {
            this.signOut();
        });
    }
}
export function getClientSettings(): UserManagerSettings {
    return {
        authority: environment.authorityUrl,
        client_id: 'my_client_id',
        redirect_uri: `${environment.baseUrl}/auth-callback`,
        post_logout_redirect_uri: environment.baseUrl,
        response_type: 'id_token token',
        scope: 'openid profile my_api',
        filterProtocolClaims: true,
        loadUserInfo: true,
        automaticSilentRenew: true,
        silent_redirect_uri: `${environment.baseUrl}/silent-renew-callback`,
    };
}

问题是,阅读一些帖子后,续订用户时似乎应该挂了一个事件:

this.manager.events.addUserLoaded(_ => {
            this.manager.getUser()
                        .then(user => {
                            this.user = user;
                        });
        });

我的问题是,在您使用无提示续订时是否必须添加该强制性功能;如果不需要,是否在您之前遇到过任何问题的钟声中添加该功能。

谢谢

0 个答案:

没有答案