【问题标题】:JSON web token, make it client specificJSON Web 令牌,使其特定于客户端
【发布时间】:2016-12-23 20:27:07
【问题描述】:

我已经使用 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,

        };

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

【问题讨论】:

  • 令牌是从客户端生成的?
  • 不是服务器生成的

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


【解决方案1】:

在 HTTPS 标头请求中使用 jwt 令牌时没有问题。如果您希望第二个设备无法使用相同的令牌,我认为您必须在数据库中创建一个字段来存储用户设备的 MAC 地址,并且如果相同的用户和密码向使用不同的 MAC 地址的服务器,您可以确保用户没有未经授权。

【讨论】:

    【解决方案2】:

    简短回答:没有。

    长答案:

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

    在 OAuth 中“更不可能”,因为生成令牌的是服务器,而不是客户端。这不是 OAuth 的设计初衷。

    【讨论】:

      【解决方案3】:

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

      这就是 OAuth2 的重点。令牌并不意味着特定于用户,而是特定于应用程序。

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

      我猜您想将其作为一种安全措施,但我仍然认为您不应该这样使用该系统。令牌始终是安全的,因为它们始终在通过 HTTPS 加密的身份验证标头中传递。

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

      【讨论】:

      • IP 地址、主机名和 MAC 地址都可以相对容易地被欺骗/伪造。
      猜你喜欢
      • 2015-09-20
      • 2021-03-12
      • 2018-08-02
      • 2015-11-07
      • 2018-02-03
      • 2013-04-14
      • 2014-11-17
      • 2016-08-10
      • 1970-01-01
      相关资源
      最近更新 更多