JSON Web令牌( JWT )是发出服务器用来标识用户、跟踪会话数据和授权请求的服务器签名对象。
JWT是由服务器签名的,这一事实保证令牌是由访问服务器的私有或共享对称密钥的人产生的,但是--有什么机制可以确保令牌被授权用户发送到服务器?
例如,假设我有一个服务器向世界发出一个JWT。无论我是否通过安全连接传输该令牌,因为客户端可以保存、解密和重新传输数据,因此似乎可以放心地假设,一旦一个客户端拥有web令牌,每个人都拥有该web令牌。
那么,我如何确保在我的服务器上,通过有线进入的令牌实际上是来自授权方的?
发布于 2015-09-01 21:36:52
在一句话中:您必须信任客户端使用TLS,并且通常保护令牌。
与许多令牌系统一样,JWT依赖于客户端来保护其令牌。客户端已经需要维护身份验证所需的凭据(例如:密码),因此这不是一个完全不同的概念。此外,JWT的过期时间通常比凭据短得多,因此保护它们通常更容易。
下面是来自相关规范的一些片段。
JWT RFC利用JSON网络签名RFC,需要使用TLS:
为了防止信息泄露和篡改,必须使用TLS与提供机密性和完整性保护的密件一起应用保密保护。
JWT类似于OAuth 2.0的无记名代币概念。承载令牌RFC声明:
拥有无记名令牌(“承载人”)的任何一方都可以使用它来访问相关资源(而无需证明对加密密钥的占有)。为了防止滥用,需要保护不记名代币在储存和运输中不被披露。
在第5.2节中,它还指出,在获取令牌和使用令牌时,必须使用TLS来确保在传输中令牌的安全性:
这要求客户端与授权服务器之间的通信交互以及客户端与资源服务器之间的交互利用机密性和完整性保护。
发布于 2015-09-02 00:06:32
询问信息所有者是否批准了请求。
正如尼尔·史密斯在回答这个问题时指出的那样、JWT、OAuth和许多其他基于令牌的认证系统上的RFCs依赖于终端用户维护其令牌的保密性。
对我个人来说,这是一个难以接受的难题:许多终端用户不知道令牌是什么,甚至不知道它在哪里,更不用说为什么或者如何保护它了。
虽然这听起来非常基本,但指出:如果最终用户意识到有人试图访问他们的私人信息,或者最终用户意识到他们的密钥的隐私受到了损害,人们可能会辩称,他们更有可能提醒感兴趣的人,某些事情出了问题。
因此,我们可以得出结论,当前的任务是设计一个系统,使最终用户能够很容易地知道何时访问他们的私有信息,何时使用他们的令牌。虽然我们不能设计一个不依赖于信任的系统,但我们可以设计一个将密钥保护与用户已经拥有并知道如何管理的利益联系起来的系统。
在使用web令牌的系统的假设实现中,可以尝试以下几点:
虽然上述步骤肯定不是JSON令牌、OAuth或许多其他基于令牌的身份验证系统上的RFCs的一部分,但它部分地将信任问题从一个不知道如何保持令牌安全的用户转移到一群理想中知道如何很好地实现双因素身份验证的工程师手中。
https://security.stackexchange.com/questions/98328
复制相似问题