如何在授权服务器外验证JWT

时间:2016-09-22 11:17:55

标签: jwt self-contained

最近,我尝试使用JSON Web Token(JWT)作为访问令牌来实现OAuth2.0服务器。我对JWT的独立功能感到非常困惑。我注意到JWT可以在任何地方进行验证,而不是在授权服务器中强制验证,因为它是独立的。这个功能如何运作?为实现自足功能,JWT应包括哪些主张?

另一个问题是,如果JWT是无状态的,则意味着服务器不应存储JWT。然后JWT如何验证?它不容易伪造吗?

我是这个领域的新秀,我希望有人可以帮助我:)

1 个答案:

答案 0 :(得分:1)

JWT包含可以签名,加密或两者兼有的声明。 使用加密密钥执行这些操作。密钥可以是对称的(例如oct和密钥)是非对称的(例如私钥/公钥对,例如RSAEC密钥)。

如果要验证JWT(即JWS),则必须执行以下步骤:

  • 检查标题(支持算法,关键声明在有效载荷中并且可以理解它们的值)。
  • 检查声明(尤其是expiatnbfaud)。
  • 检查签名。

要检查签名,您需要密钥,并且根据算法,此密钥可以是

  • 对称密钥
  • 公钥如果不对称

如果您想允许第三方应用程序验证您的JWT,您将使用非对称密钥并与第三方共享公钥。 由于公钥不能用于签名,因此第三方不能伪造具有自定义声明的有效令牌。

您共享密钥的方式取决于您。常见的方法是提供应用程序将检索它们的URL(例如https://www.googleapis.com/oauth2/v3/certs处的Google密钥)。