У меня есть приложение angular с бэкэндом веб-API, аутентифицирующимся на экземпляре ADFS. Мы не используем JWT, просто куки.
Таким образом, аутентификация работает нормально, если вы пытаетесь получить доступ к веб-API напрямую, он перенаправляет вас в ADFS, которая затем перенаправляет вас обратно. Проблема в том, что если вы go напрямую angular приложению (не прошли проверку подлинности), оно не работает (элементы stati c загружаются, но все HTTP-запросы не выполняются, поскольку вы не прошли проверку подлинности).
Так что мой Идея заключалась в том, чтобы создать http-перехватчик, проверить наличие аутентификации cook ie и перенаправить соответственно. Я не уверен, что это правильно с точки зрения потока, но в теории это казалось возможным решением.
Итак, я создал перехватчик - примерно так же, как это подробно описано в этом сообщении в блоге:
https://weblog.west-wind.com/posts/2019/Apr/07/Creating-a-custom-HttpInterceptor-to-handle-withCredentials
И в этом я проверяю если повар ie существует, если он не перенаправляет пользователя, что-то вроде этого:
function getCookie(name) {
const splitCookie = document.cookie.split(';');
for (let 1 = 0; i < splitCookie.length; i++) {
const splitValue = splitCookie[i].split('=');
if (splitValue[0] === name) {
return splitValue[1];
}
}
}
@Injectable()
export class HttpRequestInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
return next.handle(req).pipe(
tap(() => {
const authCookie = getCookie('.AspNet.Cookies');
if(!authCookie){
window.location.href = 'redirect here';
}
})
);
}
}
Но, похоже, это не работает, я не получаю никакого перенаправления. Любая идея, если это «правильный» способ сделать это или есть лучшее решение в отношении файлов cookie?