我计划为受OAuth 2(JWT)保护的Web API开发命令行客户端。访问令牌和刷新令牌分别存在五分钟和三十分钟。由于用户在坐下(例如,测试或调试会话)时将使用命令行客户端超过五分钟,因此刷新令牌需要存储在本地计算机上,因此在开始时仅需要一次身份验证会话,而不是稍后。
我想知道在哪里可以安全地存储刷新令牌。用户主目录中的文本文件听起来可能不太糟,因为这也是用户存储其所有私人文档的地方。但是,由同一用户运行的任何其他应用程序都可以读取该令牌并滥用它。
解决此问题的常用解决方法是什么?
答案 0 :(得分:0)
在这里您可以使用 Resource Owner Password Credentials Grant ,您将在其中使用命令提示符来获取最终用户凭据并将其交换为令牌。这样,您可以考虑一种基于请求令牌时获得的最终用户凭据对接收到的令牌进行加密的方法。因此,无论何时需要使用刷新令牌,都可以提示最终用户输入他们的密码,这样您就不必存储密码,也可以对令牌进行加密,以便其他任何进程都不能照原样窃取它们。
答案 1 :(得分:0)
如Kavindu所说,请使用ROPG-如果您的实现支持刷新令牌
之后,您可以将令牌存储在内存中或通过OS安全存储。该选择有点主观,取决于所访问数据的敏感性
如果使用操作系统安全存储,则为每个应用程序+用户存储令牌,以确保隔离性
执行此操作的示例跨平台组件是keytar,我过去在台式机应用程序中使用过-基于nodejs-不确定是否适合您: https://github.com/atom/node-keytar/blob/master/README.md
请参阅本文章的“操作系统安全存储”部分,以了解如何通过内置的操作系统工具查看和管理条目: https://authguidance.com/2018/01/26/final-desktop-sample-overview/