代码之家  ›  专栏  ›  技术社区  ›  JDT

如何在数据库中存储OAuth 2访问令牌?

  •  0
  • JDT  · 技术社区  · 7 年前

    我在这方面见过很多线索,但没有具体的方法。

    我目前正在让一个用户通过OAuth2与第三方进行身份验证,并得到一个访问令牌作为回报。

    我想存储这个访问令牌很长一段时间,所以我使用一个数据库来这样做。

    我的问题是如何处理这个数据库条目以确保安全性。

    我不能散列它(因为我会一个密码),因为我需要能够读取和使用原始的呼叫代表用户的第三方。

    因此,我只能保持原样,寻找一种双向加密方法(是否有最佳/推荐的npm包?)或另一种我不知道的解决方案。

    我对访问令牌的安全性没有经验,因此不知道最好的路线,如果您能提供任何信息,我将不胜感激。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  6
  •   Community Mohan Dere    6 年前

    我想存储这个访问令牌很长一段时间,所以我使用一个数据库这样做

    一种解决方案是在数据保存到数据库之前对其进行加密,并在每次需要访问时对其进行解密。在您的情况下,我认为对称加密是正确的选择,因此您需要有一个必须始终保持安全的私钥。这种加密最常用的算法是 Advanced Encryption Standard AES也知道,对于您的用例,建议使用AES-256实现。

    this question 在安全堆栈上,Exchange不能完全解决您的场景,对它的回答可能会帮助您更好地理解加密/解密数据库字段中数据的流程。 This answer

    现在你已经有了你想要阅读的流程的视觉概念 this article 这将引导您了解在数据库中存储敏感数据的基本加密策略:

    为了安全地将数据存储在数据库中,首先要在字节数组中生成一个强密钥值。这最好是以编程方式生成的。这个单一的密钥可以用来加密所有你想存储的数据。

    当您执行加密操作时,您可以用这个密钥初始化加密程序,然后为要加密的每个记录生成一个新的、唯一的初始化向量。

    到这个时候,你必须有一个更好的图片,如何在数据库中保护您的令牌,如果允许的话,我想提出一个建议和一个警报,然后我去。。。

    Lets-encrypt .

    基于此,我将假设您的节点服务器是唯一一个代表用户调用第三方服务数据的服务器,然后将自己作为API公开给使用它的客户端,可能是网站和/或移动应用程序。

    这是真的,我想提醒你,你的服务器可能成为API滥用的对象,因为暴露在 this series of articles

    • 数据刮取-从API自动获取专有数据。
    • 帐户劫持-重新使用窃取的凭据登录到您的服务帐户。
    • 聚合-未经许可,您的数据作为商业企业的一部分与其他人的数据聚合。