【发布时间】:2019-01-27 21:16:25
【问题描述】:
我已经使用 JWT 令牌实现了 Identity,并使用 [Authorize] 属性保护了路由。这很好用。有几个关于使用 JWT 和 Identity 保护路由的教程,但我找不到任何关于如何让特定用户在经过身份验证后才能访问他们自己的东西的教程。
到目前为止,我已经这样做了:
[Authorize]
[HttpGet("protected")]
public async Task<string> ProtectedArea()
{
var userName = User.Identity.Name;
var user = repository.GetUserByEmail(userName);
//var user2 = _userManager.FindByIdAsync(userName); //user2.id gives null reference error
return User.Bio;
}
这里,GetUserByEmail 是一个简单的方法,它通过查询数据库返回用户对象(我无法让 UserManager 在这里工作,或者使用 FindByEmailAsync 返回用户,因为它会抛出一个空引用例外)
这是我的claims 的样子:
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName),
new Claim(JwtRegisteredClaimNames.NameId, user.Id.ToString())
};
那么从令牌中识别用户然后继续显示该用户信息的标准方法是什么?我上面所做的对我来说似乎有点老套,但这是正确的方法吗?另外,我是否需要对每条路线进行检查并通过方法获取用户 ID,或者是否也可以通过某些属性这样做?
任何帮助将不胜感激。
【问题讨论】:
标签: c# asp.net-core asp.net-identity jwt