最近,我尝试使用 JSON Web Token (JWT) 作为访问令牌来实现 OAuth2.0 服务器。我对 JWT 的独立功能感到非常困惑。我注意到 JWT 可以在任何地方进行验证,而不是强制在授权服务器中进行验证,因为它是独立的。这个功能是如何工作的? JWT 中应包含哪些声明才能实现自包含功能?
另一个问题是,如果 JWT 是无状态的,则意味着服务器不应该存储 JWT。那么JWT是如何验证的呢?难道就不能轻易伪造吗?
我是这个领域的菜鸟,希望有人能帮助我:)
JWT 包含可以签名、加密或两者兼而有之的声明。
这些操作是使用加密密钥执行的。密钥可以是对称的(例如oct
等密钥)是不对称的(例如私钥/公钥对,例如RSA
or EC
keys).
当您想要验证 JWT(即 JWS)时,必须执行以下步骤:
- 检查标头(支持算法,关键声明位于有效负载中,并且可以理解它们的值)。
- 检查索赔(特别是
exp
, iat
, nbf
, aud
).
- 检查签名。
要检查签名,您需要密钥,并且根据算法,该密钥可以是
当您希望允许第三方应用程序验证您的 JWT 时,您将使用非对称密钥并与第三方共享公钥。
由于公钥无法用于签名,因此第三方无法使用自定义声明伪造有效令牌。
共享密钥的方式取决于您。常见的方法是提供一个 URL,应用程序将在其中检索它们(例如,Google 密钥位于https://www.googleapis.com/oauth2/v3/certs https://www.googleapis.com/oauth2/v3/certs).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)