我正在使用Spring-data-rest,但这可能是一个普遍的问题。如果我正在创建REST服务,并且经过身份验证的用户进行了REST查询,但该查询提取了一些未经授权的数据,则响应是403,还是我应该过滤掉未经授权的数据,然后将其余的发送出去。
另一种情况是,用户请求数据完全未经授权。在这种情况下,响应应该是403还是404?
答案 0 :(得分:1)
对于GET,我使用404和过滤。 如果响应是一组实体,那么我只过滤掉当前用户没有READ权限的那些实体。 (如果所有数据都被过滤掉,则请求为空集,但仍然可以。) 如果响应是一个实体,并且用户对此没有读取权限,那么我返回404。
恕我直言,如果用户没有READ权限,那么他甚至都不应该知道该实体的存在。 (如果我返回403,那么他将知道存在一个具有该ID的对象。)
如果用户具有READ权限,但没有UPDATE / DELETE权限,并且他试图操作数据,我只会返回403。
此外,如果他尝试删除多个对象,那么我只会删除他具有DELETE权限的那些对象,然后静默地跳过其余对象。
我创建了Spring-Data-Rest ACL extension,如果您对此感兴趣,它将自动在所有自动生成的端点(更多)上自动处理所有这些问题。