授权,而不是认证
任何网络应用程序的登录界面相当于该应用程序告诉你:“为了访问我数据库中的您的数据,请证明您是您所说的那样。”您正在与应用程序进行身份验证,以便您能够享有向其提供数据的特权。在之前的博客文章中,我介绍了应用程序控制您数据的缺点。应用程序的所有者可以限制您访问自己的数据。他们可以删除这些数据。他们可以将数据出售给第三方。可能会引入一个漏洞,让其他人访问数据。它们可能会被攻击。或者他们可以回避这一切,只是为了修改其政策,或者看到所有权或管理层的变化。简而言之:胡说。那是您的数据!您不应该向任何人证明您有权访问它。没有人应该告诉您如何使用自己的数据。没有人应该对您的数据做您感到不舒服的事情。要获得对您数据的主权,您必须对存储它的数据库拥有主权。如果您拥有数据库,您实际上就拥有数据。但运行数据库是一项严肃的任务,我们不能期望普通用户能够做到。即使您运营一个个人数据库,应用程序应该如何与之互动呢?在过去的几个月里,我探索了个人数据库授权的概念,它允许您授予应用程序访问您控制的数据库的权限。具体而言,我在我的项目ayb中构建了一个授权流程,以便于创建数据库、与合作者共享以及从任何地方查询它们。下面是一个视频,展示了您如何授予应用程序访问您拥有的新创建的数据库的权限。重要的是,该应用程序没有登录界面,而是要求您提供数据将要存储的数据库:授权在行动中:一个没有登录界面的待办事项应用程序,要求访问您控制的数据库。Todos是我创建并作为日常使用的待办事项列表应用程序。掌握您的数据以下是视频中发生的事情背后的三个原则:授权,而不是认证。在传统的网络应用程序中,您通过与应用程序进行身份验证来登录/证明您的身份。只有在您凭借密码/密钥等证明自己之后,才能访问您的数据。这使得应用程序掌控了您的数据。相反,您应该授权应用程序访问您的个人数据库。在视频中,您会看到Todos要求您“连接您的数据库(‘授权我!’)”而不是“输入您的密码(‘认证您自己!’)”。支持此流程的技术是被广泛理解和使用的:Todos启动OAuth2流程以请求ayb的令牌,以查询数据库。我已经开源了一个ayb.js库,替应用程序管理这些OAuth2交互,工程师可以在不到一个小时的时间内将其集成到新的应用程序中。创建数据库应该像创建文档一样简单。大多数用户可以打开Microsoft Word或Google Drive并创建一个空文档。另一方面,大多数用户不知道如何设置一个定期备份并可以连接到运行应用程序的Postgres数据库。在视频中,授权流程允许您选择一个现有的数据库或创建一个新数据库,创建新数据库就像为其选择一个名称一样简单。如果您创建了一个数据库,您将定期收到快照/备份,而无需任何配置,应用程序知道如何与ayb对接、运行迁移并存储数据。数据库创建流程不比在您的计算机或云端创建文件要难,这比现在大多数数据库的情况要好得多。应用程序应该在用户的数据库之外尽可能少地存储数据。视频中的Todos应用程序是静态HTML、CSS和JavaScript。它对其访问者一无所知。我假设在我的服务器日志中可以找到任何下载静态资源的人的IP地址,但除此之外,应用程序不在我的服务器上存储任何状态。为了增加隐私,您可以下载一个自包含的index.html文件并自行托管该应用程序。当您首次加载Todos时,它会要求您连接到您的数据库以开始。一旦它拥有一个可以查询您数据库的令牌,所有您的私人待办事项都会存储在您拥有的数据库中。您可以随时撤销Todos的访问权限。信任您的主机 在刚刚庆祝存储在您控制的数据库中的数据的优点后,我必须稍微泼冷水。目前为止,我实际上说了“不要将数据存储在其他地方,而是存储在名为ayb的东西中。”ayb是开源的,虽然您可以为自己托管它,但您想这样做吗?我相信ayb的安装和运行相当简单,但我并不认为每个用户都应该成为数据库管理员。这使用户面临一个令人沮丧的选择:用对第三方应用程序的信任换取对数据库的控制。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡