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