JSON Web令牌-如何识别用户?

时间:2018-07-19 09:36:57

标签: c# asp.net-core jwt backend asp.net-core-webapi

基本上,我使用的是JWT身份验证,在成功登录后,我将返回JWT令牌,到期时间和用户的GUID(我应该吗?)

让我们举个例子:

我有一个端点,该端点返回需要认证的用户特定数据

那我该怎么办?

我们这么说

user1生成了他的jwt:“ a.b.c”

user2生成了他的jwt:“ c.b.a”

如何确保user1不会使用其JWT访问用户的2数据?

我曾考虑过(如前所述)使用JWT令牌发送用户的GUID并将其用作识别该用户的一种方式,但是如果有人拥有别人的GUID,那么他将能够操纵他的数据,这不是好。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果user1和user2通过分隔的ip发送请求,则可以通过确认用户名和客户端ip来生成jwt令牌,并在验证令牌时检查从验证请求中发送的请求是否来自已验证令牌的用户名+ ip和用户名+ ip,否则使用数据过滤器机制

答案 1 :(得分:0)

它回答了我的问题:

@Mardoxx

  

如何确保user1不会使用其JWT访问用户的2数据? jwt有效负载通常具有子声明,该子声明是向其颁发令牌的标识符。在此存储用户标识,然后检查两者。然后,jwt令牌所有者只能访问其自己的匹配用户标识数据。

  

如果user1和user2通过分隔的ip发送请求,则可以通过确认用户名和客户端ip来生成jwt令牌,并在验证令牌时检查从验证请求中发送的请求是否来自已验证令牌的用户名+ ip和用户名+ ip,否则使用数据过滤器机制

https://stackoverflow.com/a/45315377/10074551

  

您应该能够在控制器中检索这样的声明

var identity = HttpContext.User.Identity as ClaimsIdentity;
if (identity != null)
{
    IEnumerable<Claim> claims = identity.Claims; 
    // or
    identity.FindFirst("ClaimName").Value;
}