我目前正在使用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。但是我有没有潜在的安全隐患?
答案 0 :(得分:1)
JWT上的签名只会保护令牌里面的免受篡改,但不能保护令牌外部的权利要求。因此,结构中的expires
字段不受保护,可能会被篡改。
为防止篡改,您需要使用exp
claim。
两个有效的解决方案是:
expires
exp
expires
,然后使用exp
根据您的要求,您可能更喜欢一个而不是另一个。就个人而言,我会保持简单并与(2)
一起使用