0

我正在开发需要与我的服务器通信的Chrome扩展。我正在使用Google Server端的oauth进行身份验证。当用户首次安装扩展时,他需要使用google登录,并且在oauth服务器端流动后,我的服务器向用户发送我的扩展存储在本地存储中的unqiueid。随后对我的服务器的每个请求都是一个post请求,其中uuid是有效负载的一部分,用于对用户进行身份验证。现在这个场景的问题是,我不确定这种技术有多安全,因为我相信任何人都可以将别人的uuid存储在本地存储中,从而能够访问其他人的帐户。我知道我可以在我的服务器和客户端之间使用ssl来请求请求,以防止从我的服务器窃听请求/响应,但是即使我有私人访问其他人的计算机的权限,我也可以轻松地复制uuid。我想知道是否有任何更好的扩展身份验证方式,而不要求用户每次打算使用我的扩展时都使用oauth登录。唯一标识请求来自我的扩展的特定安装

回答

1

我假设你只想将这个UUID存储一段指定的时间。毕竟,您为用户获得的访问令牌可能会在以后被撤销。

但是,在授权登录期间,您可以通过'noncing'来更安全地使用UUID,以及有关客户端的其他“独特”信息,例如IP地址和会话cookie。因此,将一组唯一标识的信息基本连接在一起,然后在存储到客户端之前使用公钥对其进行签名。同样的事情也太:

token = encrypt: UUID + client IP + sessionID 

而在服务器端,你会怎么做:

raw = decrypt: token 
UUID = uuidPart: raw 
assignedIP = ipPart: raw 
assignedSessionID = idPart: raw 
verifyMatch: assignedIP, currentIP 
verifyMatch: assignedSessionID, currentSessionID 

要成功地伪装成另一个用户,被攻击需要有两个令牌,也是IP为同原始客户端,这比您以前的设置更安全一些。

+0

我是密码学的新手,并没有理解这将如何防止简单的剪切和粘贴攻击。请原谅我,如果我错了,但不会nonce使uuid无用,下一次我的客户端尝试使用uuid登录作为会话cookie和/或ipaddress可能会不同。如果你能详细说明你的答案,那将是非常棒的。 – 2012-03-17 09:35:58

+0

我在答复中添加了更多信息。你计划多久保留这些uuid? – Perception 2012-03-17 10:27:55

+0

我打算将uuid保留多少天,因为访问令牌有效或直到用户注销。我使用了两个类似的书签扩展。他们使用oauth进行身份验证,但我不需要每次都登录到他们。我只需要登录时,我清除我的缓存或x天后。示例 - > diigo书签扩展,保存到脉冲等 – 2012-03-17 10:48:36