我使用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,
};
问题是,令牌可以在任何其他计算机上使用,它会将令牌授权为有效。如果从不同的客户端计算机生成,我需要使令牌无效。
答案 0 :(得分:1)
简短回答:不。
答案很长:
您正在寻找的是设备证明,识别设备并确保只有该设备正在通信的能力。这是一个众所周知的问题 - 它需要在操作系统级别控制设备,确保令牌不会被盗(通过应用程序利用,设备利用或通信漏洞)。它几乎是不可能的。
它更加不可能"在OAuth中,因为服务器正在生成令牌,而不是客户端。这不是OAuth的目的。
答案 1 :(得分:0)
这种行为是有道理的。令牌使用有效凭据生成,可以在任何计算机上使用,直到它过期。
这就是OAuth2的重点。该令牌并不是特定于用户的,它应该是特定于应用程序的。
如果您仍想将其绑定到特定计算机,则可以添加标识原始计算机的内容,例如IP地址,主机名,mac地址,以及可以唯一标识计算机的任何内容。您可以将此信息添加到生成的令牌本身,当使用令牌时,您只需检查它是否与原始数据匹配。
我猜你想做这个作为安全措施,但我仍然不认为你应该如何使用该系统。令牌总是安全的,因为它们总是在通过HTTPS加密的身份验证标头中传递。
您应始终通过HTTPS与身份验证服务器进行通信,以防止对请求和任何类型的请求拦截进行任何类型的调整。
答案 2 :(得分:0)
在HTTPS标头请求中使用jwt令牌时没有问题。如果您希望它使第二个设备不能使用相同的令牌,那么我认为您必须在数据库中创建一个字段来存储用户设备的MAC地址,并且如果相同的用户名和密码将请求发送到具有不同MAC地址的服务器,请确保该用户未被授权。