如何根据Rest API中的角色控制响应属性?

时间:2015-01-13 13:19:08

标签: json api rest response access-control

我们正在尝试使用用户访问控制来实现RestAPI,其中相同的URI应该为具有不同角色的两个用户返回不同的响应。比如说,响应URI(/ resource / 123)

{
    "customer_name":"user_name", #String
    "location":"000", #String
    "age":30 #Int
    "has_submitted_tax":true #Boolean
}

如何根据角色隐藏每个属性。

方法1:

隐藏用户不应该访问的节点

问题:这将破坏响应结构。客户端可能会中断,因为预期的节点会被遗漏。

方法2:

为该节点返回null。

问题:这会破坏响应数据类型。作为一个布尔'节点将具有空值。

方法3:

返回该节点的默认值。

问题:这里节点将有一些值,其中为节点返回实际值的机会相等。(默认值是实际值)

1 个答案:

答案 0 :(得分:1)

没有正确或错误的答案。这一切都取决于客户和服务之间的合同。当您为例如合同定义时getCustomer(),然后该合同将规定

  1. 某些值可能是空字符串,或
  2. 掩码值为xxx或
  3. 该字段可能根本不存在(类似于XML中的可选元素)
  4. 总结了你的3种方法。只要客户知道你采取了哪种策略,那就没关系了。

    如果您将授权应用于具有大量期望某种行为的客户端的现有API,那么您最好的选择是使用具有默认值的替换值的掩码值。风险并不是说默认值可能是真实的,而是最终用户不知道信息已被屏蔽。