基于令牌的认证系统并不意味着JWT是令牌格式。
如果您选择Slack或MS Graph实现并移动 clientState / token 从请求的主体到 Authorization 标题使用 Bearer 计划你不会发现重大差异。 <子> 确实,标头是传递用于验证请求的信息的最合适方式,服务器可能会以比请求正文更安全的方式处理标头...但是为了这个讨论,我们忽略它。 子>
clientState
token
Authorization
Bearer
令牌将是一个 引用令牌 其中实际价值毫无意义,消费者从独立商店获得有效性和任何相关信息。在这种情况下,仅通过确保令牌与您期望的值匹配来判断有效性,并且没有与令牌相关联地存储的附加信息,但是这仍然是基于承载令牌的认证系统,具有令牌的任何人都可以提出要求。此外,令牌不是通过任何OAuth 2.0流程获得的,但对于类似这些场景的场景来说,这样做会有些过分。
Github实现将被归类为对纯承载的改进,因为没有令牌在线路上传输,只有有效载荷的签名,这意味着能够解密通信信道的攻击者只能重放捕获的请求并且不发出具有不同有效负载的请求。
你可能不会发现使用全功能的OAuth 2.0加上JWT作为令牌格式的webhooks实现,因为它对于手头的用例来说太过分了。
的 更新 强> :
JWT的到期时间是你想要的,因为它将是by-reference tokens(你称之为简单令牌)的到期。
我试图传递的消息是,您不需要JWT,也不需要OAuth,以获得基于令牌的身份验证系统。基于令牌的系统的安全特性可以独立于所使用的令牌格式来设计;是的,一些格式将简化某些方面,同时可能使其他方面更复杂。这总是一个权衡...
在一个你只想确保谁是你信任的人而不仅仅是一个完全陌生人的系统中,JWT似乎有点过分;这当然是我的看法。
关于简单令牌本身就是秘密,取决于你秘密的意思。承载认证方案中使用的JWT或引用令牌如果泄露则会给出完全相同的结果。拥有令牌的人可以在令牌有效时发出请求。如果您指的是用于签署JWT的密钥/密钥,而该密钥不是通过网络传输的,那么如果您使用签名的引用令牌,这将是完全相同的。
同样,对您的基本问题的诚实回答是,这些系统添加了他们认为值得考虑系统威胁模型的安全机制。就个人而言,我并不反对不使用OAuth 2.0加JWT,因为在该用例中似乎完全不值得。我倾向于采用Github方法。
您可能不喜欢它们提供的安全特性,但MS Graph和Slack方法都是使用承载令牌的基于令牌的系统。