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