OAuth2返回JWT代替access_token

时间:2014-10-29 19:30:26

标签: oauth oauth-2.0 jwt

我目前正在使用bshaffer PHP库here构建OAuth2提供程序。

我发现IETF draft specifications概述了专门将JSON Web令牌用作授权授权和客户端身份验证的实现。

我感兴趣的实现是返回JWT代替常规访问令牌,如here所示。在死链接的情况下,访问令牌响应粘贴在下面。

{    
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpZCI6IjYzMjIwNzg0YzUzODA3ZjVmZTc2Yjg4ZjZkNjdlMmExZTIxODlhZTEiLCJjbGllbnRfaWQiOiJUZXN0IENsaWVudCBJRCIsInVzZXJfaWQiOm51bGwsImV4cGlyZXMiOjEzODAwNDQ1NDIsInRva2VuX3R5cGUiOiJiZWFyZXIiLCJzY29wZSI6bnVsbH0.PcC4k8Q_etpU-J4yGFEuBUdeyMJhtpZFkVQ__sXpe78eSi7xTniqOOtgfWa62Y4sj5Npta8xPuDglH8Fueh_APZX4wGCiRE1P4nT4APQCOTbgcuCNXwjmP8znk9F76ID2WxThaMbmpsTTEkuyyUYQKCCdxlIcSbVvcLZUGKZ6-g",
    "client_id":"CLIENT_ID",
    "user_id":null,
    "expires":1382630473,
    "scope":null
}

它返回JWT代替常规授权授权的定期生成的访问令牌。客户和用户凭据授权对我来说更重要,因为我们只处理第一方API访问。

这种实现似乎是理想的,因为我不需要维护生成的令牌存储,从而限制了所需的基础架构数量。在某些时候,如果我们向第三方开放API,我们需要一个用于各种pub / priv密钥的密钥存储库来验证每个客户端的令牌,并且如果一些邪恶的一方窃取了加密密钥,则限制风险。

我觉得这是一个很好的实现,依赖于非对称加密和SSL / TLS。但是我有没有潜在的安全隐患?

1 个答案:

答案 0 :(得分:1)

JWT上的签名只会保护令牌里面的免受篡改,但不能保护令牌外部的权利要求。因此,结构中的expires字段不受保护,可能会被篡改。

为防止篡改,您需要使用exp claim

两个有效的解决方案是:

  1. 针对expires
  2. 仔细检查exp
  3. 放弃expires,然后使用exp
  4. 根据您的要求,您可能更喜欢一个而不是另一个。就个人而言,我会保持简单并与(2)

    一起使用