【问题标题】:how to get secured files from restful web service如何从 RESTful Web 服务获取安全文件
【发布时间】:2013-12-01 15:29:48
【问题描述】:

我正在设计一个 RESTful Web 服务,我对如何在 API 端点上提供文件有点困惑。这些文件仅供特定用户使用。

我正在使用 AWS S3 签名方法对 API 的所有请求进行签名。当前的情况是我有一个列表显示属于当前登录用户的所有文件。我不希望任何人点击任何文件的 url 来显示该文件的内容。我需要对文件的其余控制器使用相同的加密方法,因此所有文件都必须使用随每个 get 请求发送的 Authorization 标头进行保护。

那么,最好的方法是什么?

【问题讨论】:

    标签: php rest


    【解决方案1】:

    您的应用程序应该检查哪个用户正在尝试访问哪个文件,如果该用户与文件的所有者不匹配,您应该返回 403 状态(禁止访问)。听起来您已经知道用户是否是文件的所有者,因为您只列出了属于用户的文件。如果用户不是所有者,则拒绝返回文件。

    【讨论】:

    • 问题不在于页面本身或返回给用户的文件。我可以将正确的文件返回给每个用户,但我正在寻找的是如何防止任何人仅通过在地址栏中键入 url 来使用此文件。我也不知道在这种情况下我必须使用的理想方法
    • 您可以控制允许谁下载文件。如果允许用户下载文件,则返回该文件。如果不允许用户返回错误 (403)。为此,您检查哪个用户在每次请求文件时尝试访问文件。您已经为文件列表执行了此操作。只需为每个单独的文件添加相同的逻辑即可。
    • 我是否必须使用与每个请求相同的机制,通过使用授权标头对请求进行签名以防止对 API 的匿名调用,然后如果有人试图访问我的客户端之外的文件,我将返回错误(403) 因为他没有提供正确的签名。对吗?
    • 是的。每个请求都应独立考虑。如果用户对 100 个不同的文件发出 100 个单独的请求,您应该单独检查每个请求以查看是否允许用户下载文件。 REST 是无状态的,服务器不应该根据之前的请求猜测用户是谁,它应该在每个请求上对用户进行身份验证。
    • 因此,对于这种情况,如果我尝试为当前登录的用户显示个人图片。我正在使用backbonejs来构建我的客户端,在正常情况下,我会编写以下代码<img src="path/to/image" />,但在这里我需要签署请求才能从端点获取文件,我是否必须在保存客户端密钥并将其路径到主干的包装控制器,我有点困惑:D
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2012-01-21
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多