【问题标题】:Store in DB api keys for third party service存储在第三方服务的数据库 api 密钥中
【发布时间】:2019-04-16 09:16:43
【问题描述】:

我有一个 java 应用程序,我有用户使用用户名和密码连接到它。 我将亚马逊服务用于托管和应用程序中的其他内容。

我想进行一次休息调用以从第三方服务获取一些数据,并且我需要用户为其输入 API 密钥。 每个用户都有自己的 API KEY。

我不希望用户每次都输入 API KEY。

我不想将 API KEY 原样存储在数据库中,所以我尝试用谷歌搜索,但没有找到任何专业的\优雅的解决方案。

除了使用某种算法对 API 密钥进行加密和解密之外,您还有什么想法吗?

【问题讨论】:

    标签: java database api encryption api-key


    【解决方案1】:

    如果您想将 API 密钥存储在数据库表中,那么除了加密该数据以保护它之外,确实没有任何替代方法。但是,有一种替代方法不涉及将密钥存储在数据库中。相反,您可以使用 JWT 用户令牌。使用 JWT,当用户登录或需要进行身份验证时,您也可以提示他们输入 API 密钥。然后,您将向用户颁发一个令牌,其中包含声明部分中的 API 密钥。每当用户以调用 API 的意图访问您的服务时,JWT 就会被传入,服务器可以提取 API 密钥。

    在 JWT 方法下,API 密钥只会与您的每个用户一起存储,并且它们将不会存储在您的数据库或系统的其他位置,至少不会在任何长期内存储容量。

    【讨论】:

    • 感谢您的回答,要求用户在每次登录时输入 API 密钥,甚至将其保存在用户浏览器缓存中都不是一种选择。用户在第一次注册时就进入了 API,从那时起我需要拥有它并使用它。
    • 然后只要求一次,如果需要更改则再次提示。您的选择基本上是与您一起存储并加密,或与用户一起存储未加密。
    • 您建议的选项我不清楚。 1. 与您一起存储并加密 2. 与用户一起存储未加密。你到底是什么意思?
    • 我只是在回顾/总结我的答案。
    • 与用户一起存储你的意思是用户浏览器?同样在这种方法中,用户必须在每个会话中重新输入 API 密钥对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2021-03-18
    • 2020-08-23
    • 2012-12-12
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多