Flask-HttpAuth 和 Flask-Login
Posted
技术标签:
【中文标题】Flask-HttpAuth 和 Flask-Login【英文标题】:Flask-HttpAuth and Flask-Login 【发布时间】:2014-11-27 14:47:00 【问题描述】:我正在创建一个小型 REST 服务。我正在寻找不同的身份验证方法。 对于网站,我使用了模块 Flask-Login。似乎是会话身份验证。 Flask-HttpAuth 模块提供了 http 和 digest 认证方法。我有点困惑。 它们相互补充吗? 什么是更好用的原因是什么?
谢谢。
【问题讨论】:
【参考方案1】:对于 REST 服务,您不需要 Flask-Login。通常在 Web 服务中,您不存储客户端状态(Flask-Login 所做的),而是对每个请求进行身份验证。 Flask-HTTPAuth 为你做这件事。
只有当您的应用程序具有 Web 组件和 REST API 组件时,您才会同时使用这两种组件。在这种情况下,Flask-Login 将处理 Web 应用程序路由,而 Flask-HTTPAuth 将处理 API 路由。
免责声明:我是 Flask-HTTPAuth 的作者。
【讨论】:
我查看了您关于 REST 的报告。看来我应该总是发送登录密码。我发现了有关会话身份验证的信息。我希望它存在。我开发我的自行车以了解我的确切需求。对不起,但你的例子对我来说还不够。我稍后会重读。 是的,对于 API,每次请求都发送身份验证是很正常的。您可以使用用户/密码,也可以使用提供更高安全性的令牌,因为可以撤销泄露的令牌。我在我的博文中展示了这两种方法。 嗯,其中一个图书馆的作者本人花时间提供了答案,@viktor.likin 甚至懒得接受或赞成这个答案。感谢 Miguel Grinberg 提供的见解,请接受我的谦虚投票。 @SJoshi:对不起,我不认为这是登录,这就是我误解你的原因。所以你的 API 有一个“get-token”路由,你问是否可以将它用于基于 Web 的登录表单?提交凭证的方法会有所不同,您可能会为 API 使用 JSON,并为 Web 应用程序使用标准表单编码。结果也不同。对于返回令牌的 API,对于 Web 应用程序,您需要在用户会话中记录登录状态,因为您无法轻松地使浏览器发送令牌,但很容易使其发送 cookie。 如果需要,您可以将用于 API 的相同令牌写入 cookie,但行为仍然非常不同,因此您最好将令牌生成移至一个通用模块web app和api都可以访问。或者只是让 Flask 生成一个用户会话并将 Flask-Login 用于 Web 应用程序,只为 api 留下令牌。【参考方案2】:您可以使用 decorators 以非常简单的方式为 Flask 设置 Basic Auth,无需其他模块。
看看:http://flask.pocoo.org/snippets/8/。
使用 flask-restful,只需将 method_decorators = [required_auth]
添加到 Resource
类属性即可。
您可以扩展上面的 sn-p,例如允许用户从 数据库 检索。
请注意,在 REST 架构中,请求是 stateless:您不使用会话,而是随每个请求发送标识令牌(请参阅 http://broadcast.oreilly.com/2009/12/principles-for-standardized-rest-authentication.html)。
【讨论】:
我同意你的看法。我一直在寻找现成的解决方案。我可以自己做你所描述的。它似乎应该存在。【参考方案3】:是的,它们相互补充。
您还可以查看 Flask-security,一个多合一的库:
https://pythonhosted.org/Flask-Security/
基于会话的身份验证 角色管理 密码加密 基本 HTTP 身份验证 基于令牌的身份验证 基于令牌的帐户激活(可选) 基于令牌的密码恢复/重置(可选) 用户注册(可选) 登录跟踪(可选) JSON/Ajax 支持
【讨论】:
以上是关于Flask-HttpAuth 和 Flask-Login的主要内容,如果未能解决你的问题,请参考以下文章
flask restful-api实现及基于flask-httpauth实现基础权限管控
flask restful-api实现及基于flask-httpauth实现基础权限管控
flask restful-api实现及基于flask-httpauth实现基础权限管控
flask restful-api实现及基于flask-httpauth实现基础权限管控