Мне удалось реализовать приведенное ниже решение JWT в моем MVC WebApi по следующей ссылке: Аутентификация JWT для Asp.Net Web Api
Теперь я хочу получить доступ к заявке в контроллерах, но все заявки равны нулю. Я попробовал несколько вещей, и все они возвращают ноль.
Как добавляется претензия в атрибуте JwtAuthentication:
protected Task<IPrincipal> AuthenticateJwtToken(string token)
{
string username;
if (ValidateToken(token, out username))
{
//Getting user department to add to claim.
eTaskEntities _db = new eTaskEntities();
var _user = (from u in _db.tblUsers join d in _db.tblDepartments on u.DepartmentID equals d.DepartmentID select u).FirstOrDefault();
var department = _user.DepartmentID;
// based on username to get more information from database in order to build local identity
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username),
new Claim(ClaimTypes.SerialNumber, department.ToString())
// Add more claims if needed: Roles, ...
};
var identity = new ClaimsIdentity(claims, "Jwt");
IPrincipal user = new ClaimsPrincipal(identity);
return Task.FromResult(user);
}
return Task.FromResult<IPrincipal>(null);
}
То, что я пробовал до сих пор
Метод расширения для получения заявки:
public static class IPrincipleExtension
{
public static String GetDepartment(this IIdentity principal)
{
var identity = HttpContext.Current.User.Identity as ClaimsIdentity;
if (identity != null)
{
return identity.FindFirst("SerialNumber").Value;
}
else
return null;
}
}
Использование функции, определенной в посте (ссылка выше):
TokenManager.GetPrincipal(Request.Headers.Authorization.Parameter).FindFirst("SerialNumber")
Попытка получить доступ к претензии через поток:
((ClaimsPrincipal)System.Threading.Thread.CurrentPrincipal.Identity).FindFirst("SerialNumber")
Для всего вышеперечисленного претензия всегда равна нулю. Что я делаю не так?