database - 如何设置临时密码访问资源?
问题描述
语境
开发一个包含内容和一些文件的平台。用户可以创建资源并设置它:
- 私人:只有他可以访问
- 受保护:可通过可过期的密码访问
- public:没有安全规则可以访问
问题
考虑到我们有两张表:
如果可见性 = 'protected',我们想保护我们的元素表。所以创建者应该为资源访问提供一个密码,并设置一个过期日期。
用户可以设置许多具有不同到期日期的密码。我们如何才能安全地存储该密码,并考虑用户可以共享密码,关闭密码访问,并在需要时获取他的密码访问以共享资源。
我们在这里谈论解决方案的概念,不关心语言或orm。
潜在的解决方案
定时任务
创建一个将密码与实体连接的表,当用户设置密码时,启动一个 cron 作业,该作业将active
在达到到期日期时将属性设置为 false。
问题:使我们的应用程序有状态,如果基于云并且 pod 崩溃,cron 作业就会失效......
将其存储在base64中
为了让用户取回已经设置的密码,我们必须使用对称加密算法来加密和解密密码,但是如果数据库被破坏,这会暴露资源。
还在此处创建一个将密码与实体连接的表。
暂时没有更多的想法......你会怎么做?
最好的解决方案应该是无状态的,并且不要清楚地存储密码。
解决方案
我可以想到其他两种解决方案
一种 PubSub 机制,您可以选择在执行时触发。例如,当您今天创建密码并希望它明天到期时。您可以创建将在一天内触发的 pubsub 任务。该任务将删除该密码。
一个 JWT 令牌,它是一个对其中的信息进行编码的令牌,其中包括到期日期。当您验证该令牌时,您将验证签名以确保它没有被篡改以及它是否仍然有效。如果您需要在其中存储秘密,可以使用 RS256。
推荐阅读
- amazon-web-services - psycopg2 不适用于 AWS Lambda 上的无服务器框架部署
- gradle - AndroidX KTX 导航片段和导航 ui 的版本更新从版本 2.2.2 到 2.3.0 失败
- c# - Identity Server 4 Demo 返回无效的 ClientId
- pytorch - 使用 conv2d 的问题 - 错误的张量输入形状
- excel - 为什么我的用户表单输入字段不能退回小数位?
- swift - XCode:在自定义 UIView 的顶部分层一个按钮
- c# - 从 ASP.NET core 3.1 API 调用 WCF 服务
- node.js - NodeJS 和猫鼬 - UnhandledPromiseRejectionWarning: MongoError: Transaction 1 has been aborted
- windows-subsystem-for-linux - WSL2 上的 Ubuntu 18.04:“登录失败:未授予用户在此计算机上请求的登录类型。”
- reactjs - 更改在滑块中显示给用户的值