c# - 如何从 Webapi 控制器访问存储在声明中的自定义类型的值?
问题描述
我在自定义令牌生成中向 JWT 令牌添加了一些声明信息“id”
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[] { new Claim("id", user.Id.ToString()), new Claim( ClaimTypes.Role, user.Role ) }),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
当我尝试从声明中访问声明类型“id”时,它给了我一个运行时错误
访问声明的代码
public async Task<IActionResult> GetAll()
{
//var identity = HttpContext.User.Identity as ClaimsIdentity;
//if (identity != null)
//{
// IEnumerable<Claim> claims = identity.Claims;
// // or
//}
var id = User.FindFirst("id").Value;
//some code here to access servce
}
我正在排队的错误 var id = User.FindFirst("id").Value;
更新 这是显示用户有效并且其“id”已添加到声明中的屏幕截图
更新
这是我的自定义授权属性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AuthorizeAttribute : Attribute, IAuthorizationFilter
{
public AuthorizeAttribute()
{
}
public void OnAuthorization(AuthorizationFilterContext context)
{
var user = (User)context.HttpContext.Items["User"];
if (user == null)
{
// not logged in
context.Result = new JsonResult(new { message = "Unauthorized" }) { StatusCode = StatusCodes.Status401Unauthorized };
}
}
}
为什么它会引发错误,我如何访问声明中的“id”?
解决方案
我能够通过将当前经过身份验证的用户附加到HttpContext
推荐阅读
- php - 如何在 phabricator 中删除端点?
- react-native - React Native 无法启动服务器并在 @react-native-community/cli/build/commands/doctor/healthchecks/index.js 中出现错误
- c++ - 如何读取 Blender 的默认立方体?
- python - 如何根据标准偏差用随机值填充列的空单元格但每个单元格必须包含新值
- python - 如何使用带有索引的 OpenPyXl 将多级索引导出到 excel
- python - Zappa 部署错误 - troposphere==2.7.1 没有帮助 AttributeError: 'Template' object has no attribute 'add_description'
- pine-script - 以点数为单位设置策略的 TP 和 SL
- azure - Nuget 包管理器在离线时找不到包,即使使用在线设置也不会在线尝试
- php - php中的json数据获取
- javascript - reducer 中的类型问题,使用 useReducer 的 typescript