我目前正在为社交网络应用程序设计REST API。
我正在尝试决定如何锁定每个用户对特定资源的访问。例如,我有以下网址
https://social-network.com/api/user?id=2/someUpdateOrPostOp
(or https://social-network.com/api/user/id=2/someUpdateOrPostOp)
https://social-network.com/api/user?id=3/someUpdateOrPostOp
我当然需要id = 2的用户不能将其id更改为url中的3并对id为3的用户的数据执行操作。
注意:我将JAX-RS与Tomcat一起使用,并且使用该API的客户端是Android设备。
我需要研究什么技术来实现这一目标?我觉得这一切我都想不到。
感谢您提供的任何帮助,这使我非常困惑!
最佳答案
您需要两件事:
确认呼叫者身份的逻辑,即您知道呼叫者是爱丽丝。这可以通过OAuth,Open ID Connect或其他协议来实现。您可以使用更多基本身份验证,例如HTTP BASIC Auth,但这会导致密码反模式,由此您可以与API共享密码。
给用户的逻辑决定了用户可以做什么。这称为授权或访问控制。如果您使用的是JAX-RS,则可以使用消息拦截器查看用户ID,然后查看请求的对象或调用的参数,然后决定是否通过身份验证的用户不符合请求的访问,拒绝访问轮廓。您甚至可以在XACML中使用外部化授权。但是,考虑到您的简单用例,那就太多了。
您可以阅读有关JAX-RS拦截器here的更多信息。