OIDC - 如何阻止某人欺骗 JWT access_token?
OIDC - What's to stop someone from spoofing a JWT access_token?
当您向 OIDC 提供商进行身份验证时,您会取回一个 ID 令牌,如果您为 API 指定范围,您会取回一个访问令牌,以便客户端应用程序可以向最终用户的受保护资源发出请求代表。通常,访问令牌也是 JWT。
但是如何阻止某人欺骗这些访问令牌之一,并创建一个并将其传递给 API?我知道有防止修改的保护措施,因为签名将与任何验证逻辑所期望的不同,但是如果恶意用户手动创建了一个全新的签名怎么办?特别是因为这些令牌可以由任何需要访问令牌的 API 验证 'in place'(并非所有 API 都使用内省端点......尤其是使用 JWT)。我知道有关于来自 OpenID Connect 提供商的 JWT 签名密钥的元数据,并且它在 OIDC 发现文档中可用。例如,这里是 Google's JWK metadata。鉴于您拥有公开可用的签名信息,并且无需向 OIDC 提供商发出任何请求即可验证 JWT 访问令牌,那么 JWT 的安全性如何?是什么阻止了一个人创建一个并将其作为不记名令牌传递给需要访问令牌的 API?
But what is to stop someone from spoofing one of these access tokens, and creating one and passing it to an API?
如果没有用于签名原始 JWT 的私钥(假设您使用的是非对称签名算法,如 RS256),签名的欺骗和重建几乎是不可能的。
可通过 OIDC 发现文档获得的 JWK 信息仅包含 public 密钥。
也使用 HTTPS 进行授权/令牌交换以避免令牌嗅探。
当您向 OIDC 提供商进行身份验证时,您会取回一个 ID 令牌,如果您为 API 指定范围,您会取回一个访问令牌,以便客户端应用程序可以向最终用户的受保护资源发出请求代表。通常,访问令牌也是 JWT。
但是如何阻止某人欺骗这些访问令牌之一,并创建一个并将其传递给 API?我知道有防止修改的保护措施,因为签名将与任何验证逻辑所期望的不同,但是如果恶意用户手动创建了一个全新的签名怎么办?特别是因为这些令牌可以由任何需要访问令牌的 API 验证 'in place'(并非所有 API 都使用内省端点......尤其是使用 JWT)。我知道有关于来自 OpenID Connect 提供商的 JWT 签名密钥的元数据,并且它在 OIDC 发现文档中可用。例如,这里是 Google's JWK metadata。鉴于您拥有公开可用的签名信息,并且无需向 OIDC 提供商发出任何请求即可验证 JWT 访问令牌,那么 JWT 的安全性如何?是什么阻止了一个人创建一个并将其作为不记名令牌传递给需要访问令牌的 API?
But what is to stop someone from spoofing one of these access tokens, and creating one and passing it to an API?
如果没有用于签名原始 JWT 的私钥(假设您使用的是非对称签名算法,如 RS256),签名的欺骗和重建几乎是不可能的。
可通过 OIDC 发现文档获得的 JWK 信息仅包含 public 密钥。
也使用 HTTPS 进行授权/令牌交换以避免令牌嗅探。