在基于令牌的身份验证中,某些信息被编码为令牌,并且该令牌被发送到客户端(通常作为仅限http的cookie)。客户端使用相同的令牌进行响应,并将令牌解码到服务器以验证客户端是否是他们所说的人。
我有几个问题我无法解答答案,所以希望得到一些连贯的帮助:)
令牌中是否有与特定客户端绑定的内容?即如果Alice复制Bob的令牌,那么Alice可以将经过身份验证的请求发送给服务器吗?
鉴于此,令牌实际上是否提供了任何无法提供存储在服务器数据库中的随机令牌的内容?即我的服务器生成随机UUID,将其散列存储在具有Alice的数据的缓存中,并将其发送到客户端。客户端使用相同的令牌响应,服务器在缓存中查找并获取凭据。
换句话说,JWT只是一种生成UUID的昂贵方式吗? (我假设您无法将所需的所有客户端数据编码到令牌中,并且即使使用令牌也必须在服务器端进行数据库/缓存查找)。
答案 0 :(得分:2)
是的,JWT令牌通常有许多声明。主题声明通常将标识经过身份验证的用户。如果Alice复制了Bob的令牌,她可以像使用Bob一样使用API /应用程序。这就是为什么使用https防止承载令牌被盗的重要性。
'iss' => Issuer of the token (Authority)
'sub' => Subject identifying the principal, typically the authenticated user
'aud' => Audience, the application trying to use the token
'exp' => Expiration, until when the token is valid.
有关OAuth 2.0中使用的JWT令牌的详细信息,请参阅here。
安全令牌对会话令牌的影响就像你描述的那样,它们可以在不必返回发行者(或中央数据库)的情况下进行验证。发行者使用其私钥对令牌进行签名。应用程序配置了相应的公钥,并且无需转到发行者即可验证令牌是否已泄露。