【问题标题】:Apigee App Services - Securing sensitive data in /Users collectionApigee 应用服务 - 保护 /Users 集合中的敏感数据
【发布时间】:2014-02-13 09:02:58
【问题描述】:

我在默认应用服务/Users 集合中存储了一组用户。

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

{
  "username" : "john.doe",
  "email" : "john.doe@gmail.com",
  "name" : "John Doe",
  "password" : "test1234"
}

姓名和电子邮件不是特别敏感(尽管仍应妥善保护),但如果我想包括地址、出生日期、母亲的娘家姓等,这些数据会变得更加敏感。

幸运的是,/users 数据在未经身份验证的情况下不可用,但如果我请求 access_token 并登录。

当然,人们可以很容易地设计一个前端来隐藏敏感位,将其隐藏起来。但是查看底层端点,捕获我的access_token 并向/{org}/{app}/users 发出经过身份验证的 GET 请求并不需要太多,因此可以看到所有每个用户的个人信息。

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

如果没有,是否有其他方法可以解决这种困境并保护用户对象中的敏感信息?

【问题讨论】:

    标签: api security apigee


    【解决方案1】:

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

    基本上(虽然这比我能够在简短的回复中多做几个步骤)您会执行以下操作:

    1) 在 API 服务中为您的 usergrid.com 目标创建一个代理 (https://api.usergrid.com/{yourorg}/{your app})

    2) 创建 /users 资源。

    3) 要么使用 Javascript 标注来仅使用您要公开的元素重写有效负载,要么使用 ExtractVariables 策略来提取您要公开的特定元素,并使用 AssignMessage 策略来设置仅包含您的响应的新有效负载想暴露。

    【讨论】:

    • 是的,这也是我的解决方法。感觉应该有更简单的方法来处理它?我想将数据分成单独的集合也可以,然后将它们代理在一起。
    • 使用两个收集方法会起作用。一个集合 /userPublic 可能包含公共信息,另一个集合 /userPrivate 可能包含敏感信息。您可以在 /userPublic 条目和 /userPrivate 条目之间创建连接,然后设置权限,以便只有该用户有权访问 /userPrivate 条目。这确实有一个缺点,即 /userPublic 连接不一定是唯一的(您可能不希望它是唯一的)。
    • 应用服务非常适合私有 API。您可以快速启动资源并建立一些基本的用户权限,但它并非设计为 public api。当您进入条件数据时,您实际上是在谈论比应用服务的简单性更程序化的东西。因此... API 服务。
    【解决方案2】:

    莱姆斯,

    除非您删除或修改“默认”角色,否则您无法使用其他用户的令牌查看一个用户的数据。所以没什么好担心的。

    此外,作为一种良好做法,您应该确保在标头中发送 oauth 令牌,而不是在查询字符串中(例如,不要执行 ?access_token=''。

    【讨论】:

    • 谢谢罗德。但在许多情况下,用户需要能够查询(用于搜索目录等)。所以没有办法向未经授权的用户隐藏用户实体的块?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2011-03-14
    • 1970-01-01
    • 2014-07-14
    相关资源
    最近更新 更多