我正在建立一个网站,以使用Google的OAuth2界面进行用户身份验证。该网站将存储与每个用户关联的私有(private)数据-我打算对其进行加密。
如果我对网站实现自己的身份验证方法,则可以轻松地从用户的凭据(包括用户的密码)派生 key ,从而可以为每个用户的数据提供严格的保护。但是我相信使用OAuth2只能接收访问 token ,并在一段时间内向该用户授予权限-问题是访问 token 的值会随着时间而变化。
OAuth2是否可以为我提供与用户相关联的不可变的 secret ,我可以使用该 secret 来从中获取安全 key ?还是有其他使用OAuth2创建安全的持久 secret 的方法?
- - 编辑 - -
针对这些问题和评论,请考虑以下几点:
我想我想发现的是OAuth提供程序是否可以向OAuth客户端提供安全地链接到用户和客户端的不可变值-实际上,这是只有OAuth提供程序使用以下组合才能解锁的 key :用户的密码(他们的身份验证密码)和客户端的密码(在OAuth协议(protocol)中使用)。然后,客户端可以使用该值为用户的数据提供合理的安全级别。
当然,这种实现并非从滥用方面就算是完美的,但可以正确实现,它可以提供一种合理的方式来保护数据,同时仍然使用OAuth方案的良好做法。
最佳答案
token 的要点是,然后您可以使用 token 从Google获取有关该用户的信息。在初始身份验证期间,您将告诉用户和google您要访问有关用户的某些信息:
https://developers.google.com/+/api/oauth
假设用户允许您访问他们的信息(例如他们的电子邮件地址),则可以从google获取他们的电子邮件地址。获得他们的电子邮件地址后,您可以为他们的用户生成一个 secret key ,将其存储在用户表中,并使用它来加密他们的数据。然后,当他们再次登录时,您可以查找他们的电子邮件地址并找到他们的 key 。
不变信息是否需要“ secret ”?还是仅仅是识别用户的 key ?
如果您要存储的信息是真正的私有(private)信息,并且您想要使其成为私有(private)信息,那么您就无法访问用户的数据,那么您要做的就是为用户存储加密的Blob。用户下载数据后,就可以使用其 key 在客户端解密数据。