OIDC-什么';s阻止某人欺骗JWT访问令牌?

OIDC-什么';s阻止某人欺骗JWT访问令牌?,jwt,openid-connect,jwk,Jwt,Openid Connect,Jwk,当您向OIDC提供程序进行身份验证时,您将获得一个id令牌,如果您为API指定了作用域,您将获得一个访问令牌,以便客户端应用程序可以代表最终用户向受保护的资源发出请求。通常,访问令牌也是JWT 但是,如何阻止某人欺骗这些访问令牌中的一个,并创建一个并将其传递给API呢?我知道有一些保护措施可以防止修改,因为签名将不同于任何验证逻辑所期望的,但是如果恶意用户手动创建了一个全新的签名怎么办?特别是因为这些令牌可以由任何需要访问令牌的API“就地”验证(并非所有API都使用内省端点…尤其是JWT)。我

当您向OIDC提供程序进行身份验证时,您将获得一个id令牌,如果您为API指定了作用域,您将获得一个访问令牌,以便客户端应用程序可以代表最终用户向受保护的资源发出请求。通常,访问令牌也是JWT

但是,如何阻止某人欺骗这些访问令牌中的一个,并创建一个并将其传递给API呢?我知道有一些保护措施可以防止修改,因为签名将不同于任何验证逻辑所期望的,但是如果恶意用户手动创建了一个全新的签名怎么办?特别是因为这些令牌可以由任何需要访问令牌的API“就地”验证(并非所有API都使用内省端点…尤其是JWT)。我知道OpenID Connect提供商提供的JWT签名密钥周围有元数据,并且可以在OIDC发现文档中找到。例如,这里是。鉴于您有公开的签名信息,并且JWT访问令牌可以在不向OIDC提供商发出任何请求的情况下进行验证,那么JWT的安全性如何?是什么阻止用户创建一个访问令牌并将其作为承载令牌传递给需要访问令牌的API

但是,如何阻止某人欺骗这些访问令牌中的一个,并创建一个并将其传递给API呢

如果没有用于签名原始JWT的私钥(假设您使用的是RS256之类的非对称签名算法),则几乎不可能对签名进行欺骗和重构

通过OIDC发现文档提供的JWK信息仅包含公钥


还可以使用HTTPS进行授权/令牌交换,以避免令牌嗅探。

因此,为了重建JWT,需要知道相应的私钥?是的。没错。JWT的签名部分在没有私钥的情况下无法重建,这就是签名在令牌通信中起主要作用的原因。