2016-09-22 69 views
0

最近,我试图使用JSON Web令牌(JWT)作为访问令牌来实现OAuth2.0服务器。我对JWT的独立功能非常困惑。我注意到JWT可以在任何地方进行验证,而不是在授权服务器中强制执行,因为它是独立的。此功能如何工作?为了实现独立功能,JWT应该包含哪些声明?JWT如何在授权服务器之外进行验证

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

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

回答

1

JWT包含可签署索赔,加密或两者兼而有之。 这些操作使用加密密钥执行。密钥可以是对称的(例如,oct等密钥)是不对称的(例如私钥/公钥对,例如RSAEC密钥)。

如果您想验证一个智威汤逊(即JWS),你必须执行以下步骤:

  • 检查头(算法是支持的,关键的权利要求有效载荷,其价值被理解)。
  • 检查索赔(特别是exp,iatnbf,aud)。
  • 检查签名。

要检查签名,你需要钥匙,并根据该算法,该键可以

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

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

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

+0

非常感谢!我现在清楚了解这个过程。我还有一个问题,是到期时间是减少令牌泄露丢失的唯一方法吗?我认为如果令牌存储在移动设备中,它很容易被恶意应用程序窃取。是对的吗? – LuCima

+0

是的,它可以被盗,但如果令牌过期,它就不能再使用了。这就是为什么我们强烈建议短寿命的原因 –

+0

谢谢,我现在很了解智威汤逊。 – LuCima

相关问题