这是一个关于在Slim PHP API中实现JWT的最佳方式的问题 - 我正在寻找高级/有经验的开发人员关于如何继续进行的一些指导。
我目前有一个开放的API,用户可以使用查询参数(例如设备和日期时间范围)来执行获取请求以获取数据。我也有POST数据的设备,没有身份验证。我们还没有投入生产,但显然这很糟糕。
为了解决这个问题,我一直在考虑在第一种情况下对GET请求实施无状态身份验证,特别是使用JWT。我最初想过将JWT作为查询字符串传递,并在用户登录后通过Web前端重置令牌的选项。但是,我可以看到这对于中间人攻击是不好的并且我的令牌被暴露(如果使用普通的http)。如果我要确保所有get / post请求都是作为https请求执行的,那么这是否足够安全?
似乎更安全的方式是通过标头传递令牌。但根据我对此的理解,您需要像Postman这样的内容才能发送请求,因为我的用户只想使用他们的浏览器来访问数据,所以这不是一个真正的选项。
答案 0 :(得分:0)
使用http毫无意义,https是必须的,否则用户和服务器之间的所有人都会看到密码甚至可以缓存响应。
令牌可以存储在安全cookie中,浏览器将自动包含在每个请求中。 (JWT的Slim Middleware内置了此功能)。查看https://jwt.io/
上的许多可用库如果您使用cookie,则不需要将令牌添加到查询字符串中,我不建议将令牌添加到查询字符串中,因为它们很容易泄露。 (用户喜欢将URL复制并粘贴到彼此,这也会泄漏令牌)
注意:如果您不确定JWT是否适合您,请查看:http://cryto.net/~joepie91/blog/2016/06/19/stop-using-jwt-for-sessions-part-2-why-your-solution-doesnt-work/