2

我有一个使用 IS4 的站点,前端是 Angular 7。我有 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;
                        });
        });

我的问题是,当您使用静默续订时是否必须添加它,如果不需要,如果这敲响了你们以前遇到过的任何问题的钟声。

谢谢

4

0 回答 0