Здесь чертовски много времени ...
Страница входа вызывает службу "GateWay", которая возвращает токен Jwt. Этот токен впоследствии передается в WebApi в качестве носителя в заголовке.
В WebApi мне нужно сделать две вещи:
Использовать токен носителя в атрибуте CustomAutorication для проверки пользователь может выполнить запрошенное действие.
Использовать утверждения из маркера-носителя в методах контроллера WebApi для управления доступом к данным.
У меня проблема в том, что actionContext.ControllerContext.RequestContext.Principal не устанавливается на основе токена Jwt Bearer.
Я могу прочитать токен, используя следующее, и он работает нормально:
// Read JWT Token
var handler = new JwtSecurityTokenHandler();
_token = handler.ReadJwtToken(token);
int ProfileId = int.Parse(_token.Claims.FirstOrDefault(c => c.Type == "ProfileId").Value);
Но если я попытаюсь получить к нему доступ, используя:
IPrincipal user = actionContext.ControllerContext.RequestContext.Principal;
У пользователя нет претензий.
WTF здесь происходит? В идеале я бы хотел использовать пользователя IPrinicpal, чтобы можно было легко использовать утверждения в моих контроллерах.