ValidateAntiForgeryToken блокирует новый логин - PullRequest
0 голосов
/ 15 марта 2019

У меня очень простая реализация сервера идентификации 4, и я использую oidc-client в своем угловом приложении для управления всеми средствами безопасности. В моем сервисе аутентификации у меня есть следующее:

@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.user = null;
            this.signOut();
        });
    }

    signOut(): Promise<void> {
        return this.manager.signoutRedirect()
                           .then(() => {
                               this.manager.clearStaleState();
                           });
    }

    ...more
}

export function getClientSettings(): UserManagerSettings {
    return {
        authority: environment.authorityUrl,
        client_id: 'myclient',
        redirect_uri: `${environment.baseUrl}/auth-callback`,
        post_logout_redirect_uri: environment.baseUrl,
        response_type: 'id_token token',
        scope: 'openid profile myapi',
        filterProtocolClaims: true,
        loadUserInfo: true,
        automaticSilentRenew: true,
        revokeAccessTokenOnSignout : true,
        silent_redirect_uri: `${environment.baseUrl}/silent-renew-callback`,
    };
}

Все работает как шарм, так что я могу входить / выходить без проблем, обновление токена работает, как и ожидалось, и пока все хорошо. Однако я решил реализовать «нестандартное» поведение, когда пользователь открывает приложение на нескольких вкладках в одном браузере и одна из них выходит из системы. Затем срабатывает событие UserSignedOut, и я выписываю остальные вкладки, которые могут быть открыты. У меня проблема в том, что, когда пользователь возвращается, ПЕРВАЯ попытка входа в систему выполняется правильно, однако любой последующий запрос входа в систему с любой другой вкладки приводит к 400 - ПЛОХОЙ ЗАПРОС (удаление атрибута токена Antiforgery из метода входа в мой IS4 тогда это работает, но я не хочу этого делать).

Если вы обновили вкладку, то вы вошли в систему, поэтому мне кажется, что с самим фактическим состоянием что-то не так?

Я не уверен, должен ли я вызывать какой-либо другой метод в моем AuthService перед выходом из системы или мне следует повторно реализовать ValidateAntiForgeryToken с пользовательским поведением для этого.

Любая помощь очень ценится, спасибо!

...