我遇到需要跨多个Web服务对客户端进行身份验证的情况。基本上每个服务都需要识别客户端并了解有关客户端的一些其他小部分信息。
我现在的工作方式是,所需的识别信息由验证Web服务器存储在数据库的会话表中。 Web服务器向客户端提供一个字符串,该字符串标识数据库条目并传递给其他Web服务。然后,Web服务使用此字符串从数据库条目中提取有关客户端的所需信息。
我想到,可能会给客户端一个加密的blob,其中包含用户ID和其他所需的信息,这些信息相当小,并且完全避免使用数据库。客户端只需传递blob(如前一段中的字符串),而无需知道它包含什么,只有Web服务才知道如何解密它。
这应该消除了数据库存储会话信息的需要,并且会使整个过程变得更简单。使用数据库,您必须担心清理旧会话和超时等等。
所以我的问题是:通过认为安全可接受的客户端将敏感数据从服务传递到服务?是否有可能以消除客户端篡改数据的担忧的方式来实现这一目标?什么加密算法可以使用?我正在使用.Net - 特定的课程会非常有帮助。
答案 0 :(得分:1)
这似乎是一种简化应用程序的合理方法,但请记住,如果您使用客户端存储识别数据,您将始终容易受到session hijacking attacks的攻击。
换句话说,无论您如何加密blob,其他人都可以获取用户的浏览器数据并进行复制,并模拟用户。顺便说一下,ASP.Net会话cookie总是容易受到攻击。
完全安全的唯一方法是使用SSL。