Angular с веб-интерфейсом API и аутентификацией ADFS. Проверка подлинности пользователя - PullRequest
0 голосов
/ 10 января 2020

У меня есть приложение 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?

...