我正在建立一个网站,以使用Google的OAuth2界面进行用户身份验证。该网站将存储与每个用户关联的私有(private)数据-我打算对其进行加密。

如果我对网站实现自己的身份验证方法,则可以轻松地从用户的凭据(包括用户的密码)派生 key ,从而可以为每个用户的数据提供严格的保护。但是我相信使用OAuth2只能接收访问 token ,并在一段时间内向该用户授予权限-问题是访问 token 的值会随着时间而变化。

OAuth2是否可以为我提供与用户相关联的不可变的 secret ,我可以使用该 secret 来从中获取安全 key ?还是有其他使用OAuth2创建安全的持久 secret 的方法?

- - 编辑 - -

针对这些问题和评论,请考虑以下几点:

  • 所有用户信息都应始终通过强大的加密和用户身份验证来保护-我们读到许多有关网站和数据库黑客的新闻文章的原因是,开发人员说“我们真的需要保护它吗”,然后回答“否-因为没有-一个,但我们将能够访问数据库,安全性很差,等等。”黑客下载数据库等。命名您的信用卡,电子邮件地址,电话号码,密码,然后就遭到破坏。
  • 真正的 secret 只有两个-一个是存储在某人头部的密码,另一个是只有授权用户才能访问的强随机值(例如物理 token )。如果您认为安全 key 可以仅从电子邮件地址派生,或者 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 在客户端解密数据。

    10-08 08:16
    查看更多