如何通过OAuth2身份验证保护私有数据?

ade*_*hus 10 security authentication encryption oauth-2.0

我正在建立一个网站,使用Google的OAuth2界面进行用户身份验证.该网站将存储与每个用户相关的私人数据 - 我计划对其进行加密.

如果我为网站实现了自己的身份验证方法,我可以很容易地从用户的凭据(包括用户的密码)中获取密钥,从而允许每个用户的数据受到强烈保护.但是使用OAuth2,我相信我只能接收一个访问令牌,在一段时间内授予该用户权限 - 问题是访问令牌值会随着时间的推移而改变.

有没有一种方法可以让OAuth2为我提供一个与用户绑定的不可变秘密,我可以使用它来从中获取安全密钥?或者是否有其他方法使用OAuth2创建安全持久密钥?

---编辑---

在回答问题和评论时,需要考虑以下几点:

  • 所有用户信息都应该始终受到强加密和用户身份验证的保护 - 我们阅读了很多关于网站和数据库黑客的新闻文章的原因是因为开发人员说"我们真的需要确保这一点",然后回答"否 - 因为没有 - 一个,但我们将能够访问数据库,安全性很难等".黑客下载数据库etviolá.信用卡,电子邮件地址,电话号码,密码,您的名字,然后变得妥协.
  • 只有两个真正的秘密 - 一个是存储在某人头脑中的密码,另一个是只有授权用户才能访问的强随机值(如物理令牌).如果您认为安全密钥可以仅从电子邮件地址派生,或者秘密需要存储在数据库中,那么您并不真正了解安全性.

我想我想要发现的是OAuth提供商是否可以向OAuth客户端提供与用户和客户端安全链接的不可变值 - 实际上,这将是一个只能由OAuth提供商使用组合解锁的密钥.用户的秘密(他们的身份验证密码)和客户端的秘密(在OAuth协议中使用).然后,客户端可以使用此值为用户的数据提供合理的安全级别.

当然,这种实现并不完美,因为滥用,但正确实施,可以提供一种合理的方法来保护数据,同时仍然使用OAuth方案的良好实践.

Dan*_*ott 1

令牌的意义在于,您可以使用该令牌从 Google 获取有关用户的信息。在初始身份验证期间,您将告诉用户和谷歌您想要访问有关用户的某些信息:

https://developers.google.com/+/api/oauth

假设用户允许您访问他们的信息,例如他们的电子邮件地址,那么您可以从谷歌获取他们的电子邮件地址。一旦您获得了他们的电子邮件地址,您就可以为其用户生成一个密钥,将其存储在您的用户表中,并使用它来加密他们的数据。然后,当他们再次登录时,您可以查找他们的电子邮件地址并找到他们的密钥。

是否有特定需要将不可变信息“保密”?或者它只是识别用户的密钥?

如果您存储的信息确实是私有的,并且您希望使其无法访问用户的数据,那么您所要做的就是为用户存储加密的 blob。用户下载数据后,他们可以使用密钥在客户端解密数据。

  • 但是用于解密数据库中数据的秘密也在数据库中。这不是让加密变得毫无意义吗? (6认同)