此问题在某种程度上与以下相关问题有关。但是,我需要更清楚一些方面和一些其他信息。参考: REST Web Service authentication token implementation
背景:
这是我迄今所理解的:
第一次请求:
对于后续请求:
更多详情:
这是正确的做法吗?
答案 0 :(得分:6)
为什么不将其简化为以下内容?
第一次请求:
对于后续请求:
在服务器端,令牌将以失效日期存储。在每次访问服务时,将更新此日期以创建滑动到期日期。每隔几分钟就会有一个作业删除已过期的令牌,并且检查令牌以查找有效会话的查询只会检查那些未被认为已过期的查询(如果预定的作业因任何原因失败,则会阻止永久会话)。
无需哈希和对数据库中的令牌进行加密 - 除了security through obscurity之外,它不会增加真正的价值。你可以哈哈哈哈。这可以防止设法进入会话数据表的攻击者劫持现有用户会话。
答案 1 :(得分:0)
方法看起来不错。不太安全。 让我强调一下该请求可能带来的一些攻击。
POST请求中的中间人攻击,用户可以篡改请求,服务器无法确保数据不被篡改。
重播攻击:在此,攻击者不会篡改请求。攻击者轻敲请求并在短时间内将其多次发送给服务器,虽然这是一个有效的请求,服务器多次处理请求,这是不需要的 请阅读Nonce。
在第一步中,用户将其凭据(即用户名和密码)发送到登录服务,如果您的基于Web的应用程序也使用相同的密码,则可能存在危险。如果密码被泄露,API和Web上的所有内容都暴露出来,请使用不同的PIN进行API访问。另外,确保您指定的解密令牌,在一定时间后过期。
确保服务(应用程序服务器)tomcat。如果发生内部错误,jboss永远不会返回服务器页面,这会为攻击者提供部署应用程序的服务器的额外信息。
- 基于第二次发布的修改 -
是的,如果您使用相互SSL,则是正确的,但如果是单向访问,则您没有客户端证书。如果你只是加倍确保请求中的所有内容,就像签名(签名)SOAP,强大的数据传输机制之一那样。但重放攻击是HTTPS的一种可能性,只需处理即可。休息使用令牌加密是好的。为什么不让客户端用密码解密令牌并返回解密输出,你可以验证输出,如果它存在于你的数据库中?这种方法即使是HTTPS,用户也不会通过网络发送密码?