因此,您正式遇到了现代 Web 开发中最困难的问题之一(以我的拙见):Web 身份验证。
这是它背后的理论(我稍后会回答你的问题)。
当您构建具有多个用户的复杂应用程序时,特别是如果您正在构建同时具有网站和 API 服务的应用程序,无论您在做什么,您总是会遇到身份验证问题。
解决这些问题的理想方法是在您的网络上拥有独立的身份验证服务。某种专门处理用户创建、编辑和删除的内部 API。这样做有很多好处:
- 您有一个所有应用程序组件都可以使用的身份验证源:您的网站可以使用它来让人们在后台登录,您的 API 服务可以使用它来验证 API 请求等。
- 您有一个可以智能地管理用户缓存的服务——在所有地方实现用户缓存是非常危险的(当您处理多种身份验证方法时通常会发生这种情况:您可能会为 API 服务缓存用户,但是无法在网站上缓存它们,这样的东西会导致问题)。
- 您有一个可以独立于其他组件进行扩展的服务。可以这样想:哪一块应用程序数据被访问的次数最多?在大多数应用程序中,它是用户数据。对于每个请求,都需要用户数据,这会给您的数据库/缓存/您正在做的任何事情带来压力。拥有一个管理用户的服务可以让您更轻松地扩展应用程序堆栈的这一部分。
总的来说,认证真的很难。
在过去的两年里,我一直是 OpenCNAM 的 CTO,我们遇到了同样的问题(网站和 API 服务)。为了正确处理身份验证,我们最终构建了一个如上所述的内部身份验证服务,然后使用 Flask-Login 通过网站处理用户身份验证,以及通过 API 对用户进行身份验证的自定义方法(只是对我们的身份验证的 HTTP 调用服务)。
这对我们来说非常有效,并允许我们从数千个请求扩展到数十亿个(通过隔离我们堆栈中的每个组件,并将用户身份验证作为单独的服务)。
现在,对于非常简单的应用程序或没有很多用户的应用程序,我不会推荐这个,因为它比它的价值更麻烦。
如果您正在寻找第三方解决方案,Stormpath 看起来很有前途(只需 google 一下)。
无论如何,希望有帮助!祝你好运。