Недавно начал поддерживать большой веб-проект, который написан не мной.
Проект состоит из нескольких подпроектов, каждый из которых крутится на своём сервере: AuthApi, WebApi, Web, Reports - см. скриншот ниже. Все проекты - это web api 2, а Web - это mvc application, который возвращает angularjs spa.
Никак не могу понять, каким образом проходит аутентификация.
Поиском по проекту не нашёл никаких ссылок на 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. Знаний катастрофически не хватает, т.к. очень-очень много разного материала по этой теме, который уже прочитал, яснее в голове стало, но проблему пока не решил. Возможно любой обрывок информации поможет найти в какую сторону копать.