最近,我正在尝试使用 JSON Web Token (JWT) 作为访问令牌来实现 OAuth2.0 服务器。我对 JWT 的自包含功能感到非常困惑。我注意到 JWT 可以在任何地方进行验证,而不是强制在授权服务器中验证,因为它是自包含的。这个功能是如何工作的?为了实现自包含功能,JWT 中应该包含哪些声明?
另一个问题是,如果 JWT 是无状态的,这意味着服务器不应该存储 JWT。那么 JWT 是如何验证的呢?不是很容易伪造吗?
我是这个领域的菜鸟,我希望有人能帮助我:)
最近,我正在尝试使用 JSON Web Token (JWT) 作为访问令牌来实现 OAuth2.0 服务器。我对 JWT 的自包含功能感到非常困惑。我注意到 JWT 可以在任何地方进行验证,而不是强制在授权服务器中验证,因为它是自包含的。这个功能是如何工作的?为了实现自包含功能,JWT 中应该包含哪些声明?
另一个问题是,如果 JWT 是无状态的,这意味着服务器不应该存储 JWT。那么 JWT 是如何验证的呢?不是很容易伪造吗?
我是这个领域的菜鸟,我希望有人能帮助我:)
JWT 包含可以签名、加密或两者兼有的声明。这些操作是使用加密密钥执行的。密钥可以是对称的(例如oct
,et 密钥),也可以是非对称的(例如,私钥/公钥对,例如RSA
或EC
密钥)。
当您要验证一个 JWT(即 JWS)时,您必须执行以下步骤:
exp
, iat
, nbf
, aud
)。要检查签名,您需要密钥,根据算法,该密钥可以是
当您希望允许第三方应用程序验证您的 JWT 时,您将使用非对称密钥并与第三方共享公钥。由于公钥不能用于签名,第三方无法伪造具有自定义声明的有效令牌。
共享密钥的方式取决于您。常见的方法是提供应用程序将检索它们的 URL(例如https://www.googleapis.com/oauth2/v3/certs上的 Google 密钥)。