我将angular-oauth2-oidc库与隐式流(带有 IdentityServer4 服务器)结合使用。我已经成功设置了文档中的静默刷新建议。
这是我在包装服务中引导事物的方式:
private userSubject = new Subject<User>();
constructor(private config: ConfigService, private oAuthService: OAuthService)
{ }
// Called on app load:
configure(): void {
const config: AuthConfig = {
issuer: this.config.getIdentityUrl(),
logoutUrl: this.config.getIdentityUrl() + '/connect/endsession',
redirectUri: window.location.origin + '/',
silentRefreshRedirectUri: window.location.origin + '/silent-refresh.html',
clientId: 'my_client_id',
scope: 'openid profile my_api',
sessionChecksEnabled: true,
};
this.oAuthService.configure(config);
this.oAuthService.tokenValidationHandler = new JwksValidationHandler();
this.oAuthService
.loadDiscoveryDocumentAndLogin()
.then((_) => this.loadUserProfile());
this.oAuthService.setupAutomaticSilentRefresh();
}
private loadUserProfile() {
this.oAuthService.loadUserProfile()
.then((userProfile) => {
const user = new User(userProfile['name']);
this.userSubject.next(user);
});
}
但是,如果我在新选项卡中打开应用程序,用户也会被重定向到 IdentityServer(并立即返回我的应用程序)。
我的问题:我可以让图书馆从同源的其他选项卡中检索现有的访问令牌(以及可选的用户信息),以防止重定向?(首选,因为它不需要 Ajax 调用。)
或者,在我们将某人发送到 IdentityServer 之前,是否有一种简单的方法可以尝试使用静默刷新机制?