首页 > 解决方案 > 如何设置临时密码访问资源?

问题描述

语境

开发一个包含内容和一些文件的平台。用户可以创建资源并设置它:

问题

考虑到我们有两张表:

数据库中的表

如果可见性 = 'protected',我们想保护我们的元素表。所以创建者应该为资源访问提供一个密码,并设置一个过期日期。

用户可以设置许多具有不同到期日期的密码。我们如何才能安全地存储该密码,并考虑用户可以共享密码,关闭密码访问,并在需要时获取他的密码访问以共享资源。

我们在这里谈论解决方案的概念,不关心语言或orm。

潜在的解决方案

定时任务

创建一个将密码与实体连接的表,当用户设置密码时,启动一个 cron 作业,该作业将active在达到到期日期时将属性设置为 false。

问题:使我们的应用程序有状态,如果基于云并且 pod 崩溃,cron 作业就会失效......

将其存储在base64中

为了让用户取回已经设置的密码,我们必须使用对称加密算法来加密和解密密码,但是如果数据库被破坏,这会暴露资源。

还在此处创建一个将密码与实体连接的表。

暂时没有更多的想法......你会怎么做?

最好的解决方案应该是无状态的,并且不要清楚地存储密码。

标签: databasesecuritycloudconceptual

解决方案


我可以想到其他两种解决方案

  • 一种 PubSub 机制,您可以选择在执行时触发。例如,当您今天创建密码并希望它明天到期时。您可以创建将在一天内触发的 pubsub 任务。该任务将删除该密码。

  • 一个 JWT 令牌,它是一个对其中的信息进行编码的令牌,其中包括到期日期。当您验证该令牌时,您将验证签名以确保它没有被篡改以及它是否仍然有效。如果您需要在其中存储秘密,可以使用 RS256。


推荐阅读