oidc-client-js で angular 8 を使用しています。IdentityServer4 (コード フロー + PKCE) に接続しています。アプリ (メイン コンポーネント内) を開いた後、ユーザーが認証されているかどうかを確認します。そのため、signinRedirect() を呼び出します。ボタンを手動でクリックする代わりに、コンストラクター内で呼び出すだけです (ボタンをクリックして signinRedirect() を呼び出すだけで、フロー全体が機能しました)。問題は、私が無限ループに陥っていることです。Angular は IdenityServer を呼び出し続け、ログイン ページを更新します。サーバーへの API 呼び出し (および結果としてログイン ページへのリダイレクト) は正常に機能しますが、停止しません。助けてください。
export class AuthService {
private userManager: UserManager;
private user: User;
constructor(private client: HttpClient) {
this.userManager = new UserManager(AuthSettings.settings);
this.userManager.getUser().then(user => {
this.user = user;
});
}
checkCredentials() {
if (!this.isUserLoggedIn()) {
this.redirectToLogin();
}
}
redirectToLogin() {
return this.userManager.signinRedirect();
}
isUserLoggedIn(): boolean {
return this.user != null && !this.user.expired;
}
}
export class AppComponent {
title = "app";
constructor(private authService: AuthService) {
this.authService.checkCredentials();
}
}
ユーザーは angular アプリに入ります。次に、承認エンドポイントを呼び出します (signinRedirect、コード フローで必要なサーバーのものを送信します) - サーバーは、ユーザーがログインしているかどうかを確認します。ログインしていない場合は、ログイン ページにリダイレクトします。問題は、(signinRedirect) を呼び出すボタンをクリックするとシナリオが機能するが、コンポーネントが開いているときにそれを実行すると機能しないことです。ループはログで終了します - ログインの表示: ユーザーは認証されていません。ループは HTTP/1.1 GET http://localhost:5555/.well-known/openid-configurationを開始するリクエストで始まります。その後 - HTTP/1.1 GET を開始するリクエストhttp://localhost:5555/connect/authorize?response_type=code&client_id=ng&state=kYkvO3CO4SW3asopth-dmZW8SYkuyz79Npfn0K4MPAMCT&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Fcallback&scope=openid%20API&code_challenge=2iGwqANCfZGshjmhDmmwm4Eh4Q8SowgPcImf1-CsDzs&code_challenge_method=S256&nonce=kYkvO3CO4SW3asopth-dmZW8SYkuyz79Npfn0K4MPAMCT . それが繰り返されます。