我正在使用this npm package通过PKCE代码流实现自动登录的概念。我尽可能地遵循了文档和示例。在我的app.component.ts构造函数中,我具有以下内容:
if (this._oidcSecurityService.moduleSetup) {
this.doCallbackLogicIfRequired();
} else {
this._oidcSecurityService.onModuleSetup.subscribe(() => {
this.doCallbackLogicIfRequired();
});
}
在ngOnInit中,我有以下内容:
ngOnInit(): void {
this._oidcSecurityService.getIsAuthorized().subscribe(auth => {
this.isAuthenticated = auth;
if (!this.isAuthenticated)
this._router.navigate(['/autologin']);
});
}
,在方法doCallbackLogicIfRequired()
中,我有:
private doCallbackLogicIfRequired(): void {
this._oidcSecurityService.authorizedCallbackWithCode(window.location.toString());
}
由于登录页面(和按钮)位于身份服务器(STS服务器)上,因此我的角度应用程序中具有一个自动登录组件,如下所示:
constructor(private _oidcSecurityService: OidcSecurityService) {
this.isAuthorizedSubscription = this._oidcSecurityService.onModuleSetup.subscribe(() => { this.onModuleSetup(); });
}
ngOnInit() {
if (this._oidcSecurityService.moduleSetup) {
this.onModuleSetup();
}
}
ngOnDestroy(): void {
this.isAuthorizedSubscription.unsubscribe();
}
private onModuleSetup() {
this._oidcSecurityService.authorize();
}
因此,我的理解和基于调试流程的过程如下:
doCallbackLogicIfRequiredMethod()
依次调用authorizedCallbackWithCode()
方法。oidcSecurityService.authorize()
方法。所以,现在这是我遇到一些问题的地方,不确定是怎么回事。
oidcSecurityService.authorize()
之后
方法(int auto-login.component),它将直接进入
位于应用程序组件ngOnInit中的getIsAuthorized()
方法的订阅主体。为什么
这样做吗?是什么导致它再次击中getIsAuthorized()
?这里是问题:
getIsAuthorized()
方法被多次击中,由于某种原因,它总是错误的,
即使在从自动登录组件调用authorize()
方法之后。getIsAuthorized()
甚至更多次。这种情况发生后,我收到了身份服务器的所有奇怪问题/错误,我认为这是因为这种getIsAuthorized()
方法,也许是我对何时何地使用它的理解。
问题:
getIsAuthorized()
订阅吗?做其他
库中的方法可能在后台调用它,这就是为什么它被多次调用的原因
是我的时间吗?authorize()
方法会发生这种情况,但是在auto-login.component中只有一个调用)?authorizedCallbackWithCode()
方法在哪里,它是否可以返回到任何地方(我应该订阅它的事件处理程序)吗?authorize()
方法吗?似乎是在幕后某处-
我注意到,在调用authorize()
方法(通过自动登录组件)之前,
authorizationResultComplete
事件处理程序被触发,而我从未调用过authorize()
。这是
静默更新的预期行为,是否应该通过这样做来破坏我的应用程序,我认为它应该(静默地)做所有幕后工作?我一直在为这个问题而苦苦挣扎,如果有人成功使用此库使用angular 2+成功实现了此流程,将不胜感激。
谢谢!
答案 0 :(得分:0)
我认为您比大多数身份验证服务器目前所支持的领先。我建议您实现一个简单的示例,该示例与oidc pkce流100%兼容:authorization code flow + PKCE;我试图实现与上述相同的模式;但是该逻辑是为隐式流而设计的,似乎与从身份验证服务器收到的响应不兼容。