【发布时间】:2014-12-25 16:00:21
【问题描述】:
我目前正在使用 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。但是有没有我遗漏的潜在安全风险?
【问题讨论】:
-
与您的问题相切,您获得的令牌示例不使用标准 JWT 声明。例如,它有
client_id而不是sub(这可能来自旧规范,当前要求在这里:tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-11#section-3) -
谢谢!我从中提取响应的文档必须是过时的,v1.5 正在生成一个带有“sub”、“iss”等的令牌。感谢仔细检查。
-
一个缺点是您无法在没有令牌数据库的情况下撤销已发行的 JWT 令牌。