@ShinShil

Как понять где проходит аутентификация в решении из нескольких проектов asp web api + angularjs?

Недавно начал поддерживать большой веб-проект, который написан не мной.

Проект состоит из нескольких подпроектов, каждый из которых крутится на своём сервере: AuthApi, WebApi, Web, Reports - см. скриншот ниже. Все проекты - это web api 2, а Web - это mvc application, который возвращает angularjs spa.

5b5a0fdad811a801784463.png

Никак не могу понять, каким образом проходит аутентификация.

Поиском по проекту не нашёл никаких ссылок на AuthApi внутри проекта WebApi, тем не менее разрешаются только аутентифицированные запросы. Причём требуется аутетификация при запросе к Web, и при запросе к контроллерам WebApi. В WebApi тоже не нашёл никаких упоминаний об AuthApi. Тем не менее это всё как-то работает...

В AuthApi используется OAuthAuthorization и ApplicationUserProvider, после того как наставил там брейкпоинтов и подебажил, смог разобраться как оно работает. Но методы, которые смотрел вызываются только при логине пользователя. При обновлении страницы, всё работает где-то внутри, предполагаю, что вся информация сохранена в сессии и достаётся автоматически.

Ещё один странный момент, каждый из WebApi и AuthApi выполняет настройку app.UseOAuthBearerAuthentication. Причём в AuthApi она в разы более навороченная.

Углубиться заставил баг, в ходе решения которого выяснилось, что внутри контроллеров WebApi - ICurrentUser.User == null . У меня предчувствие, что это связано с тем, что CurrentUser существует только в рамках AuthApi

Хочу как-то найти в каком месте проверяется аутентификация, и посмотреть откуда там берётся CurrentUser. А затем попробовать, если понадобиться, как-то с помощью автофака в WebApi настроить получение ICurrentUser из контекста AuthApi.

PS. Знаний катастрофически не хватает, т.к. очень-очень много разного материала по этой теме, который уже прочитал, яснее в голове стало, но проблему пока не решил. Возможно любой обрывок информации поможет найти в какую сторону копать.
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
yarosroman
@yarosroman
C# the best
Вся магия тут UseOAuthBearerAuthentication. После авторизации в SPA передается JWT токен, в котором в зашифрованом виде сохранен CurrentUser, при запросе к WebAPI, SPA передает JWT токен в HTTP заголовке, а API проверяет валидность токена и расшифровывает его вытаскивая сохраненного пользователя. Вам в WebAPI надо просто настроить JWT авторизацию, как это сделано в AuthApi.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы