我正在开发一个需要与我的服务器通信的chrome扩展。我正在使用Google Server端oauth进行身份验证。当用户首次安装扩展程序时,他需要使用google登录,在oauth服务器端流程之后,我的服务器向用户发送我的扩展程序存储在localstorage中的unqiueid。对我的服务器的每个后续请求都是一个post请求,uuid是有效负载的一部分,用于对用户进行身份验证。现在这个场景的问题在于我不确定这种技术有多安全,因为我相信任何人都可以将别人的其他内容存储在他的本地存储中,从而能够访问其他人的帐户。我知道我可以在我的服务器和客户端之间使用ssl请求来防止从我的服务器窃听请求/响应,但即使我个人访问别人的计算机,我也可以轻松复制uuid。我想知道是否有更好的扩展身份验证方式,而不是要求用户每次打算使用我的扩展时都使用oauth登录。
答案 0 :(得分:1)
我假设您只想在指定的时间段内存储此UUID。毕竟,您为用户获得的访问令牌可能会在以后被撤销。
但是,在委派登录的持续时间内,您可以通过使用一些有关客户端的其他“唯一”信息(例如其IP地址和会话cookie)“取消”它来使您的UUID更安全。因此,基本上将一组唯一标识的信息串联在一起,然后使用您的公钥对其进行签名,然后再存储在客户端。类似的东西:
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,这比您之前的设置更加安全。