【发布时间】:2010-10-15 13:48:28
【问题描述】:
我正在设计一个 API,我想问几个关于如何最好地保护数据访问的问题。
假设 API 允许访问艺术家。艺术家有专辑,有歌曲。
API 的用户可以访问所有艺术家的一个子集。如果用户调用 API 请求某个艺术家,则很容易检查用户是否被允许这样做。
接下来,如果用户请求专辑,API 必须检查专辑是否属于允许用户访问的艺术家。访问歌曲意味着 API 必须先检查专辑,然后检查艺术家,然后才能授予访问权限。
在数据库方面,我正在查看每个添加的附加层的表之间的连接数量不断增加。我不想进行所有这些连接,也不想到处存储用户 ID 以限制连接的数量。
为了解决这个问题,我想出了以下方法。
API 为用户提供对象的引用,例如艺术家对象。然后,用户可以向该艺术家对象询问专辑,这将返回一个列表对象。可以遍历列表对象,从中获取专辑对象。同样,可以从专辑对象中获取歌曲列表对象,并从中获取各个歌曲对象。
由于 API 信任艺术家对象,它也信任用户从中获取的任何对象(在本例中为专辑),无需进一步检查。对于所有其他对象,依此类推。所以我将安全/信任委托给链下的对象。
我想问你对它的看法,它的优点或缺点,当然还有你将如何解决这个“问题”。
其次,如果 API 应该是 RESTful,您将如何处理这个问题?在这种情况下,我的方法似乎不太适用。
【问题讨论】: