JSON Web令牌,使其特定于客户端

时间:2016-08-17 09:00:50

标签: asp.net-web-api asp.net-core token jwt

我使用Json Web Tokens生成了令牌。我在生成令牌时使用以下参数

  _tokenValidationParameters = new TokenValidationParameters
        {
            // The signing key must match!
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = signingKey,
            ValidateActor=true,

            // Validate the JWT Issuer (iss) claim
            ValidateIssuer = true,
            ValidIssuer = "TokenIssuer",

            // Validate the JWT Audience (aud) claim
            ValidateAudience = true,
            ValidAudience = "Audience",

            // Validate the token expiry
            ValidateLifetime = true,

            ClockSkew = TimeSpan.Zero,

        };

问题是,令牌可以在任何其他计算机上使用,它会将令牌授权为有效。如果从不同的客户端计算机生成,我需要使令牌无效。

3 个答案:

答案 0 :(得分:1)

简短回答:不。

答案很长:

您正在寻找的是设备证明,识别设备并确保只有该设备正在通信的能力。这是一个众所周知的问题 - 它需要在操作系统级别控制设备,确保令牌不会被盗(通过应用程序利用,设备利用或通信漏洞)。它几乎是不可能的。

它更加不可能"在OAuth中,因为服务器正在生成令牌,而不是客户端。这不是OAuth的目的。

答案 1 :(得分:0)

这种行为是有道理的。令牌使用有效凭据生成,可以在任何计算机上使用,直到它过期。

这就是OAuth2的重点。该令牌并不是特定于用户的,它应该是特定于应用程序的。

如果您仍想将其绑定到特定计算机,则可以添加标识原始计算机的内容,例如IP地址,主机名,mac地址,以及可以唯一标识计算机的任何内容。您可以将此信息添加到生成的令牌本身,当使用令牌时,您只需检查它是否与原始数据匹配。

我猜你想做这个作为安全措施,但我仍然不认为你应该如何使用该系统。令牌总是安全的,因为它们总是在通过HTTPS加密的身份验证标头中传递。

您应始终通过HTTPS与身份验证服务器进行通信,以防止对请求和任何类型的请求拦截进行任何类型的调整。

答案 2 :(得分:0)

在HTTPS标头请求中使用jwt令牌时没有问题。如果您希望它使第二个设备不能使用相同的令牌,那么我认为您必须在数据库中创建一个字段来存储用户设备的MAC地址,并且如果相同的用户名和密码将请求发送到具有不同MAC地址的服务器,请确保该用户未被授权。