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

2023-12-30

最近,我尝试使用 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(使用前将#替换为@)

JWT如何在授权服务器之外进行验证 的相关文章

随机推荐

  • 即使 iPad 尚未运行 iOS 4,我应该如何构建包含 iOS 4 功能的通用 iOS 应用程序?

    我想为 iPhone 和 iPad 制作一款游戏 因此 从头开始将该项目作为通用应用程序是有意义的 然而 iPhone 和 iPad 目前运行两个不同版本的 iOS 因为 iOS 4 尚未适用于 iPad 我希望在我的游戏中支持两个 iOS
  • 删除静态页面导轨的高压页面/

    你好我正在使用高压 https github com thoughtbot high voltage对于 Rails 中的静态页面 但当我制作静态页面时 我看到了下一个结构 myserver com pages about myserver
  • 我可以将 SIGINT 发送到 Windows 上的 Python 子进程吗?

    我有一个在 Windows 上管理 gdb 进程的 Python 脚本 我需要能够向生成的进程发送 SIGINT 以停止目标进程 由 gdb 管理 看来 Win32 中只有 SIGTERM 可用 但显然如果我从控制台和 Ctrl C 运行
  • python生成嵌套字典键错误

    我正在尝试从 mysql 查询创建嵌套字典 但遇到关键错误 result for i q in enumerate query result data i firstName q first name result data i lastN
  • 使用ggplot的ggmap函数将两个地图叠加在一起

    我在用ggmap绘制geom位于地图顶部 Lat 47 617736 Lon 122 334244 map1 lt get map location c lon Lon lat Lat zoom 12 map2 lt get googlem
  • 用 GDI 绘制 opengl/D3D 吗?

    我想知道是否可以使用 GDI 在 opengl direct3D 表面上进行绘制 如果是的话 该怎么做 我问的原因是因为我正在编写一个简单的应用程序来在游戏中绘制一些东西 这些东西都是 2D 或文本 例如帧速率信息 自定义十字准线 时钟等
  • 当div/组件位于视口中时,Angular 2播放CSS动画

    我正在构建一个带有角度的登陆页面 在从顶部开始的第三个 div 中我有一些动画 第一个 div 占据 100vh 视图空间 另一个占据 50 然后我有以下 div 所有这些 div 代表单独的组件 div class app about u
  • Django 1.6.2 将不提供静态内容

    I am 无法提供静态内容 出于开发目的 使用姜戈 1 6 2 没有错误信息可以配合这个 我最终在浏览器上收到一条 404 消息 在开发服务器上收到一条 404 消息 14 Apr 2014 16 50 29 GET static reso
  • 如何让 Web API OData v4 使用 DateTime

    我有一个相当大的数据模型 我想使用 OData V4 协议使用 Web API OData 来公开该模型 底层数据存储在 SQL Server 2012 数据库中 该数据库中有许多日期时间列 当我连接它时 我收到一个错误 指出不支持 Sys
  • 为什么声明的顺序对于静态初始化器很重要?

    我有这个代码 private static Set
  • 如何在 Python 中使用零偏度对数变换

    如何在Python中进行零偏度对数变换 例如在 Stata 中它的实现是lnskew0 see https www stata com manuals13 rlnskew0 pdf https www stata com manuals13
  • Laravel、composer安装,不要安装laravel/framework

    需要 Laravel 专家帮助我找出我的composer json 配置有什么问题 我用谷歌搜索答案并继续进行 我检查了每一条可能的行 我仍然可以让它工作 我从 git repo 获取了这些文件 它可以在办公室工作 但是当我尝试在家里做同样
  • DllImport、Char*& 和 StringBuilder C/C#

    我有一个问题 我尝试查看几乎所有的海报解决方案 但未能找到合适的解决方案 问题很简单 想要在我的托管 C 中从非托管 C 代码返回字符串 c 函数为 extern C declspec dllexport int process batch
  • PHPMailer 调试消息

    我正在使用 PHPMailer 我想在我的数据库中保存一些调试信息 下面的代码显示了如何在使用 SMTP 服务器时保存调试信息 如下所示 mail gt SMTPDebug SMTP DEBUG SERVER mail gt SMTPDeb
  • 如何使用 angularjs 在视图中检查 ng-if 值是否为 null?

    我有这种情况 div div i class icon ion checkmark i div div but test view null不起作用 也不只是检查test view or test view 有任何想法吗 thanks ed
  • Pycharm(Python IDE)只能显示列表的前 300 个成员

    当我用超过 300 个元素填充列表时 我用来读取 Python 的工作环境 Pycharm 将仅显示前 300 个元素 这适用于社区版和专业版 有谁知道如何解决这个问题 如果没有 是否有人知道可以显示列表中所有元素的 IDE 即使该列表有
  • 在嵌套 Python 字典中搜索键

    我有一些像这样的Python字典 A id idnumber condition e g A 1 11 567 54 2 14 123 13 我需要搜索字典是否有idnumber 11并计算一些东西condition 但如果整个字典里没有i
  • VB.NET 私​​有字段的命名约定

    VB NET 中是否有命名私有字段的官方约定 例如 如果我有一个名为 Foo 的属性 我通常将私有字段称为 Foo 这在国内似乎是不被允许的官方指南 http msdn microsoft com en us library ms22901
  • 如何将 SQL Server .bak 文件导入 MySQL?

    标题是不言自明的 有没有办法直接进行此类导入 来自 SQL Server 的 BAK 文件采用 Microsoft 磁带格式 MTF 参考 http www fpns net willy msbackup htm http www fpns
  • JWT如何在授权服务器之外进行验证

    最近 我尝试使用 JSON Web Token JWT 作为访问令牌来实现 OAuth2 0 服务器 我对 JWT 的独立功能感到非常困惑 我注意到 JWT 可以在任何地方进行验证 而不是强制在授权服务器中进行验证 因为它是独立的 这个功能