Я пытаюсь настроить последовательность входа в OAuth2.0 в приложении activjs. Бег от Хрома. Приложение реагирования проверяет, есть ли у него токен доступа или TGT, и, если оно не имеет ни одного, перенаправляет на имя входа OAuth2.0. Похоже, проблема заключается в том, что при успешном входе пользователя в систему кэширование, управляемое E-Tag, вызывает ответ «Не изменено (304)», поэтому страница входа в систему не отображается. Когда сервер OAuth2.0 получает код 304 в ответ на попытку перенаправления, я получаю ответ «не авторизован для этого приложения».
Так что мой реагирует JSX, для фильтра изменения аутентификации имеет:
componentDidMount() {
if (AuthFilter.getStoredToken()) { // do nothing if we already have a token
this.setState({ visible: true });
} else {
let tgt = this.tokenQuery();
if (!tgt) { // Need to re-direct to cas
window.location.href = this.buildLoginUrl();
} else { // we have tgt - fetch access token
this.fetchAccessToken(tgt).then((token) => {
let props = token.data.split(/&/);
let auth = props[0].substring(13);
window.sessionStorage.setItem('auth-token', auth);
this.removeCodeFromURL();
this.setState({ visible: true });
}).catch((error) => {
console.log('Access error: ' + error);
});
}
}
}
Предполагаемый поток:
- Первый вызов для реагирования SPWA не находит токены доступа.
- Перенаправляет на авторизацию вызова на сервере аутентификации.
- Сервер предоставляет пользователю страницу входа в систему.
- Пользователь входит в систему
- Успешная страница входа перенаправляет на обратный вызов. Авторизация
- callbackAuthorize перенаправляет обратно в SPWA, добавляя код =
- Фильтр видит код и использует его для получения токена доступа.
Эта ошибка не срабатывает с первой попытки. Однако OAuth2.0 запоминает логин, и если вы возвращаетесь на первую страницу, он собирает токен OK.
Я думаю, что я хочу отключить кэширование для первого перенаправления, чтобы пустая страница не кэшировалась. Но вы не можете установить заголовки, AFAIK, когда делаете перенаправление из Javascript.
Теперь все советы, которые я видел на этой доске относительно управления кэшированием реагирования, касаются регистрации сервисных работников в index.js. Только одна проблема, у моего проекта нет index.js. Все в jsx, и я не могу найти упоминаний о работниках сферы обслуживания. Если сервисные работники регистрируются, они где-то зарыты в коде реактивной плиты котла. Реагирует на версию 16.4.0