Java 基于单个URL请求对设备/用户进行身份验证

Java 基于单个URL请求对设备/用户进行身份验证,java,security,authentication,device,owasp,Java,Security,Authentication,Device,Owasp,我们目前有一个J2EE系统,它实现了OWASP十大安全措施中的大部分,目前的应用程序允许用户使用存储在数据库中的用户/密码组合登录 我有一个映射到/*的java过滤器,用于检查会话和会话属性是否存在,以确定用户的登录状态 好的,最后一个问题是:我们正在与一家生产设备的公司进行集成,该公司在发生特定事件时通过GPRS发送URL请求,该URL是到我们系统的链接 在不影响安全性的情况下,我想对这个“设备”进行身份验证,但不可能向设备发送任何信息,因此需要对单个请求进行身份验证,没有人能够“重播”该UR

我们目前有一个J2EE系统,它实现了OWASP十大安全措施中的大部分,目前的应用程序允许用户使用存储在数据库中的用户/密码组合登录

我有一个映射到/*的java过滤器,用于检查会话和会话属性是否存在,以确定用户的登录状态

好的,最后一个问题是:我们正在与一家生产设备的公司进行集成,该公司在发生特定事件时通过GPRS发送URL请求,该URL是到我们系统的链接

在不影响安全性的情况下,我想对这个“设备”进行身份验证,但不可能向设备发送任何信息,因此需要对单个请求进行身份验证,没有人能够“重播”该URL

如果没有某种相互认证,我不知道这是否可能。我曾想过要检查一个IP地址的白名单,但网络不断地改变IP地址,设备仍然“身份不明”。有什么建议吗


PS:我的临时解决方案是在我的过滤器中添加一个异常,但这不是长期的,也不是完全不安全的。SSL也不是一个选项

您可以让设备使用私钥对包含唯一请求标识符的请求进行签名。然后,服务器可以检查签名是否有效,并且仅在签名有效时接受/回答请求


请求ID可用于确保不会重播此类请求。为请求ID使用一个简单的计数器意味着很容易检查给定的标识符是否已被使用,即请求是否正在重播。

您可以让设备使用私钥对包含唯一请求标识符的请求进行签名。然后,服务器可以检查签名是否有效,并且仅在签名有效时接受/回答请求


请求ID可用于确保不会重播此类请求。为请求ID使用一个简单的计数器意味着很容易检查给定的标识符是否已被使用,即请求是否正在重播。

主要问题是,如果第三方获得该设备,该设备包含的任何身份验证信息都可以供第三方使用

所以主要的问题是你到底想认证什么,应该是设备本身,还是它的所有者,或者设备的位置,或者。。。b设备可以支持什么功能-它是什么类型的设备以及它在操作方面可以做什么

如果该设备可以嵌入智能卡或加密令牌,这些卡或加密令牌用于保存私钥并阻止提取尝试,那么数字签名将非常有效


如果设备可以有受保护的内存,但不能执行加密操作,也不能嵌入智能卡,那么我可以想到预计算的一次性密码列表,每个设备都是唯一的。服务器将有一个全局列表的副本,一旦使用该列表,就从列表中删除密码

主要问题是,如果第三方获得该设备,则该设备包含的任何身份验证信息都可以供第三方使用

所以主要的问题是你到底想认证什么,应该是设备本身,还是它的所有者,或者设备的位置,或者。。。b设备可以支持什么功能-它是什么类型的设备以及它在操作方面可以做什么

如果该设备可以嵌入智能卡或加密令牌,这些卡或加密令牌用于保存私钥并阻止提取尝试,那么数字签名将非常有效


如果设备可以有受保护的内存,但不能执行加密操作,也不能嵌入智能卡,那么我可以想到预计算的一次性密码列表,每个设备都是唯一的。服务器将有一个全局列表的副本,一旦使用该列表,就从列表中删除密码

+1-某种数字签名可能会有所帮助。请注意,如果私钥嵌入设备中,可能会对其进行反向工程。如果所有设备共享同一个密钥,这尤其糟糕。谢谢,好的,我现在知道,在最坏的情况下,如果我们真的需要,设备可以接收,但这不是最优的。我不完全理解您的答案,我理解requestID/计数器,但不知道如何签名。这让我进入了一个google会话,在那里我唯一能找到的就是oAuth。您能解释一下Joachim吗?@epoch数字签名是使用存储在设备上的私钥制作的,最好是不可提取的。会话ID可以是一个不断递增的数字,它将被签名。服务器将根据设备的标识符和签名保留给定设备上次使用的会话ID。+1-某种数字签名可能会有所帮助。请注意,如果私钥嵌入设备中,可能会对其进行反向工程。如果所有设备共享同一个密钥,这尤其糟糕。谢谢,好的,我现在知道了
在最坏的情况下,如果我们真的需要,设备可以接收,但它不是最优的。我不完全理解您的答案,我理解requestID/计数器,但不知道如何签名。这让我进入了一个google会话,在那里我唯一能找到的就是oAuth。您能解释一下Joachim吗?@epoch数字签名是使用存储在设备上的私钥制作的,最好是不可提取的。会话ID可以是一个不断递增的数字,它将被签名。服务器将根据设备的标识符和签名保留给定设备的上次使用的会话ID。嗨,Eugene,我想使其尽可能通用,因此,例如,如果我为设备添加功能,那么如果假设移动电话可以使用受保护页面的相同用例来宾登录,这将非常酷。因此,编程一个非常特定于设备的解决方案也不是最好的解决方案me@epoch在大多数情况下,移动电话既有受保护的存储,又有执行加密操作的能力,因此它们不是问题。特定的设备可能会成为一个问题。因此,我认为最终会有几种解决方案,每种功能一种。嗨,Eugene,我想让它尽可能通用,因此,例如,如果我为设备添加功能,那么如果一部手机可以使用相同的受保护页面的用户登录用例,那就太酷了。因此,编程一个非常特定于设备的解决方案也不是最好的解决方案me@epoch在大多数情况下,移动电话既有受保护的存储,又有执行加密操作的能力,因此它们不是问题。特定的设备可能会成为一个问题。因此,我认为您最终将得到几种解决方案,每种能力对应一种。