Я создаю собственную систему для аутентификации токенов jwt в определенных сценариях.
Когда я правильно проверил токен, у меня есть
var userIdentity = await user.CreateIdentityAsync(DefaultAuthenticationTypes.ExternalBearer);
owinContext.Authentication.User = new System.Security.Claims.ClaimsPrincipal(userIdentity);
owinContext.Authentication.SignIn(userIdentity);
System.Web.HttpContext.Current.User = owinContext.Authentication.User;
await next()
, но, похоже, это не исправляет аутентификацию, которая все еще не проходит - я считаю - на уровне Asp.Net Mvc.Поскольку я знаю, что используется HttpContext
, я пытаюсь добавить это перед вызовом next()
HttpContext.Current.User = new GenericPrincipal(userIdentity, new string[0]);
Это продвигает меня дальше, но я все еще, кажется, получаю ошибку авторизации, которая может показаться (при поиске источникасообщение, которое я получаю и , где он использовал ), приходит от атрибута Web Api [Authorize]
.
Я бью стену настолько далеко, насколько прослеживаю исходный код .net.Единственный способ получить это сообщение - если IsAuthorized возвращает false.Но там не указаны ни роли, ни пользователи (это просто [Authorize]
), и прежде чем отправиться на next()
, я могу остановить отладчик и проверить, что да, есть идентификатор пользователя, и да, это IsAuthorized
.
Я переопределил AuthorizeAttribute
, чтобы разместить точки останова, и вижу, что к тому времени, когда он вызывается, мой actionContext
ассоциируется с совершенно другим тождеством с IsAuthorized == false
.Что, в свою очередь, заставляет меня задуматься, неправильно ли я вхожу в учетную запись пользователя
Итак ... am Я делаю это правильно?Что мне делать?