我在构建一个安全系统,必须确保发送消息的用户与接收密钥相同。例。在哪里使用Java保存会话信息WS
用户Bob,有一个属性uniqueCode
,这对他来说是唯一的,并且使他能够从服务器接收各种信息。
有一个web服务,它有各种方法来返回各种敏感数据。当用户第一次使用客户端连接到Web服务,它通过身份验证方法确实是这样,那
- 生成该用户
- 伪随机密钥保存在服务器上的密钥,并将其返回到用户。
从客户端到WS的每个后续请求都需要uniqueCode
和密钥。如果这个对有效,请求返回所需的信息。如果x分钟内没有任何活动,则密钥无效,并且客户端要求用户重新登录。
现在我的问题是,如何将密钥存储在服务器上?关键是一个Java对象,可以被序列化。
我选择
- 让他们在一个会话。这是该公司的一位高级程序员所建议的,但这似乎不是要走的路。到处都是我读到的,建议WS不应该依赖基础的HTTP会话。
- 将它们保存在数据库中。一个可能的解决方案,但这将需要我创建一个特定的数据库,为问题增加了另一个层次。
- 将它们保存在二进制加密文件中。这似乎是要走的路,但是吗?由于我在登录时会生成一个密钥,因此我可以将密钥+一些信息保存在二进制文件中,然后将其自身加密并将其传递给用户。如果我收到的密钥可以解密用户文件,并且信息正确,则返回用户请求的信息。
我的想法是正确的,还是我错过了什么?我认为最后一个将是最安全的方法,因为如果有人能够访问我的系统,闯入数据库将很容易,但在不知道另一个用户密钥的情况下解密文件将非常困难。
谢谢!
是的,这将是可取的,并有助于提高可用性。在旁注中,如果我需要保留的密钥是一个对象,如何将它存储在MySQL数据库中?序列化,加密,然后存储为一个blob? – 2012-04-23 07:50:57
@JanisPeisenieks如果关键字有一些文本形式,你可以使用它而不是序列化和blob,这将更容易处理。至于加密,这取决于你 - 如果你担心有人可能会损害你的数据库,那么这样做 - 但是在那一点上,无论如何你都会有比用户会话更大的担心。 – jmruc 2012-04-23 07:58:50
好的,谢谢,总是很高兴听到重申。 – 2012-04-23 08:11:56