【问题标题】:securing REST endpoints with HTTP Digest authentication使用 HTTP Digest 身份验证保护 REST 端点
【发布时间】:2013-04-04 15:42:13
【问题描述】:
  • 我正在使用FlaskPython 开发一个项目,该项目的端点为
@app.route(/transaction)
def get(request):
  ...

@app.route(/transaction)
def post(request):
  ...
  • 另外,我希望 REST 端点在方法执行之前经过身份验证
  • 我对此进行了很多搜索,发现Digest Authentication 是我可能需要的(我现在还不确定)

问题

  • 如何使用 python 和烧瓶实现这样的安全模式?我可以看到并从中学习到任何可用的示例吗?
  • 我不想以明文形式传递密码,使用令牌是一个更好的主意,那么考虑 HTTP 摘要式身份验证是一个正确的选择吗?
  • 你们还有什么想推荐的吗?

我希望我的服务器是无状态,并且不在服务器端存储任何会话

【问题讨论】:

  • stateless server 是什么意思?如果您想使用身份验证,那么显然您必须将凭据存储在服务器端的某处。从这个意义上说,会话只是另一层凭据。事实上,使用 HTTP 来拥有一个有状态的服务器有点困难(如果可能的话)。

标签: python security rest authentication flask


【解决方案1】:

https://flask-restless.readthedocs.org/en/latest/

为了安全存在扩展:http://pythonhosted.org/Flask-Login/http://pythonhosted.org/Flask-Principal/

无状态服务不存储会话数据,这意味着您必须为每个请求发送凭据。

  1. 您可以只使用普通的登录名和密码,也可以使用哈希函数。
  2. 您可以在用户端存储密钥并生成/加密您的纯数据作为登录名、密码、其他请求数据。这可以保护您免受其他请求,但不能保护您免受某些请求,但您也可以添加时间戳等内容并拒绝任何旧请求,或添加唯一请求 ID 并拒绝某些请求。
  3. 您可以使用更有效的方式,例如 https。

有状态服务还可以获取普通的登录名和密码以进行身份​​验证,并生成用于授权的令牌,随每个请求一起发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2016-06-09
    • 2017-09-04
    • 2013-06-11
    • 2012-06-25
    相关资源
    最近更新 更多