Я использовал JWT для своего проекта. Я создал собственный атрибут авторизации, но AuthorizationFilterContext
имеет значение null. Когда я использую то же самое в контроллере, у меня есть доступ к контексту, но в атрибуте контекст имеет значение null.
Вот мой контроллер для входа в систему:
public async Task<IActionResult> Login([FromBody] LoginViewModel login)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var identity = await GetClaimsIdentity(login.Username, login.Password);
if (identity == null)
{
return BadRequest("username or password is wrong");
}
var response = new
{
id = identity.Claims.Single(c => c.Type == "id").Value,
auth_token = await _jwtFactory.GenerateEncodedToken(login.Username, identity),
expires_in = (int)_jwtOptions.ValidFor.TotalSeconds,
};
//string UserId = User.FindFirst("id").Value;
return Ok(JsonConvert.SerializeObject(response, _serializerSettings));
}
и это атрибут:
public class CustomCheckPermissionAttribute : AuthorizeAttribute, IAuthorizationFilter
{
private int _permissionId = 0;
public CustomCheckPermissionAttribute(int _permissionId)
{
this._permissionId = _permissionId;
}
public void OnAuthorization(AuthorizationFilterContext filterContext)
{
var x = filterContext.HttpContext.User.FindFirst("id").Value;
}
}