2016-03-01 52 views
0

我创建JWT认证,我有一些疑问:实现智威汤逊的最佳途径?

  1. ,以增加安全性,可能是一个好主意,保存在数据库 用户的令牌和检查,每次,如果通过API 发出的令牌与保存到数据库中的人匹配?它真的有用吗?

  2. 为避免在会话中保存用户信息,在JWT的有效载荷中如果他是管理员,将电子邮件地址设置为 ?

  3. 如果我将用户信息保存在JWT的有效负载中,并且用户更改了他的电子邮件或其他信息,我怎么能自动更新保存在浏览器中的用户的 令牌?

  4. 最好是将标记保存为cookie或网络存储?

+1

你读过'jwt.io'吗?如果是 - 为什么你会问这个问题? –

+1

有一件事:“我正在创建JWT身份验证”请告诉我你并没有自己动手。请使用[现有的图书馆](https://github.com/lcobucci/jwt)。 –

+0

@ScottArciszewski。我正在使用Firebase智威汤逊。昨天,我开始阅读并创建我的第一个jwt认证 – Webman

回答

2

,以增加安全性,可能是一个好主意,保存在数据库中的 用户的令牌和检查,每次,如果通过API发送的令牌 与一个保存到数据库?它真的有用吗?

这打破了使用智威汤逊的目的。智威汤逊的优势在于,您不必跟踪服务器端的会话 - 它们纯粹是客户端。智威汤逊的缺点是你不能撤销令牌因为这个(你付出的代价)。如果您想要额外的安全性,请勿使用JWT和使用随机令牌(CSPRNG,128位)跟踪会话服务器端的会话。

,以避免保存用户信息的会议,它是一个好主意,把电子邮件,如果 他是admin,等在智威汤逊的有效载荷? 如果我将用户信息保存在JWT的有效载荷中,并且用户更改了他的电子邮件或其他信息,我怎么能自动更新保存在他的浏览器中的用户令牌 ?

那么你可以使用一个用户标识,而不是电子邮件。例如,用户表的主键。然后,如果他们更新他们的信息,令牌仍然有效。您应该设置短的到期日期,所以如果用户不再是管理员,他们将不得不请求新的令牌(通常称为刷新令牌),并且新的令牌不会有管理员声明。

,最好令牌保存为饼干或网络存储?

给你。如果存储在cookie中,它会随每个请求一起发送。如果您希望使用JavaScript检索值,请使用网络存储。如果使用cookie,请将Secure标志设置为防止其通过普通HTTP进行泄漏,并将HttpOnly标志设置为使其免于域中的任何XSS漏洞。 Web存储无法以相同的方式抵御XSS(您需要确保整个域名都受到保护),但不太可能通过普通的HTTP泄露。

1

从@SilverlightFox响应类似 - 请注意,你可能需要刷新令牌数据库检查,但不能访问令牌。这样,您可以调整持续时间,因为您希望权衡安全性和效率