2014-01-23 27 views
0

我收集了存储在默认应用服务/Users集合中的用户。Apigee应用服务 - 保护/ Users集合中的敏感数据

开箱,创建一个用户,你只需要收集以下数据:

{ 
    "username" : "john.doe", 
    "email" : "[email protected]", 
    "name" : "John Doe", 
    "password" : "test1234" 
} 

姓名和电子邮件是不是特别敏感的(尽管仍必须适当地固定),但如果我想要包含地址,出生日期,母亲的婚前姓名等,这些数据会变得更为敏感。

幸运/users数据不可用而无需验证,但是,如果我请求access_token并登录。

当然人们可以容易地设计一前端,可以掩盖敏感位,从视图中隐藏了。但是看看底层端点,捕获我的access_token并向/{org}/{app}/users发送一个经过验证的GET请求并不需要太多,因此每个用户的个人信息都会看到所有的

是否有可能通过roles and permissions或所有权将实体的分段仅限制为self(例如,登录的用户可以访问其整个用户实体,但只能访问其他用户实体的有限部分)。

如果没有,是否有不同的方式来解决这种困境并保护用户对象中的敏感信息?

回答

3

瑞摩斯,

除非您删除或修改了“默认”的角色,你不能看到一个用户的数据与其他用户的令牌。所以没有什么可担心的。

此外,作为良好实践的问题,您应该确保您发送的报头OAuth令牌,而不是在查询字符串(如不这样做?=的access_token'。

+0

谢谢罗德。然而,在许多情况下,用户需要能够查询(用于搜索目录等)。那么没有办法将未经授权的用户隐藏用户实体块? – brandonscript

1

我建议您将App Services放在API服务(Apigee网关)后面,然后重写有效负载。

基本上(虽然它的一些额外的步骤比我要能够放入短的响应),你会做以下几点:

1)创建API服务代理您usergrid.com目标(https://api.usergrid.com/ {yourorg}/{您的应用})

2)创建一个/ users资源。

3)可以使用Javascript标注重写仅包含要展示的元素的有效内容,也可以使用ExtractVariables策略来抽取您想要公开的特定元素并将AssignMessage策略设置为仅包含响应的新Payload你想暴露。

+0

是的,这也是我的解决方法,感觉应该有一个更简单的方法来处理它?我想将数据分离成单独的集合也可以,然后将它们代理在一起 – brandonscript

+0

使用两种收集方法是可行的。一个集合/ userPublic可以包含公共信息,另一个集合/ userPrivate可以包含敏感信息。您可以在/ userPublic条目和/ userPrivate条目之间创建连接,然后设置权限,以便只有该用户才能访问/ userPrivate条目。这有一个缺点,即/ userPublic连接不一定是唯一的(你可能不希望它是)。 –

+0

应用服务非常适合私人API。您可以快速创建资源并建立一些基本的用户权限,但它不是为了设置_public_ api。当你进入有条件的数据时,你真的在​​谈论比App服务更简单的程序。 因此... Api服务。 –