3

我一直在阅读https://docs.truevault.com/上的文档,但我有点困惑。我在真正的保险库网站上读到了这个:

如果您计划使用任何服务器端库,请确保您使用的任何托管环境都符合 HIPAA。

我认为这意味着 TrueValut 可以支持独立的(仅限客户端)移动应用程序架构。TrueVault API 是唯一的服务器端交互。

但是我对文档的理解是:

  1. API_KEY注册新用户需要一个。
  2. AnyAPI_KEY提供对 TrueVault 中存储的所有数据仓库和 JSON 文档的完全访问权限。

如果这两个假设都是正确的,那意味着直接从客户端应用程序注册新用户是不可能的,这迫使我使用昂贵且资源密集的 HIPPA 恭维网络服务器。解决这个问题的唯一方法是将顶部硬编码API_KEY到应用程序中,如果它API_KEY可以访问我所有的 TrueVault 数据,那显然是不行的。

对于我的用例,我对 TrueVault 有以下要求,以便我能够考虑使用它(我想这些要求对于任何希望开发仅限客户端的医疗保健应用程序的人来说都是相同的):

  1. 用户可以直接从我的客户端应用程序通过 API 进行注册,而无需任何敏感密钥或 root 身份验证数据。
  2. 用户只能使用他们提供的注册数据(用户名/电子邮件/密码)进行身份验证。我的应用程序是多平台的,我不能要求他们记住他们的 API 密钥才能登录。
  3. 用户可以读取/写入/更新/删除链接到他们的个人资料的数据。他们无法使用其凭据访问其他用户的任何数据。

TrueVault 能否满足这三个基本要求?

如果对此的回答是“否”,我建议您在您的网站上更新此文本,因为在没有独立服务器端接口的情况下,TrueVault 不会支持任何可行的 HIPPA 补充应用程序。

4

2 回答 2

0

一般来说,您是正确的 - 如果您在用户和 TrueVault 之间包含零服务器端处理,那么 API 密钥将是公开的。至少,我不知道有什么方法可以避免这种情况。

话虽如此,跳到“任何 API_KEY 都提供对 TrueVault 中存储的所有数据保险库和 JSON 文档的完全访问权限”是不正确的。- 如果设置正确,情况并非如此。

TrueVault API 密钥的范围可以缩小很多。将密钥限制为仅对 {Vault#1} 的写入权限,将第二个密钥限制为仅对 {Vault#2} 的读取权限,第三个密钥允许在 {Vault#1} 中上传博客,有很多变体,a用于从 {Vault#2} 中删除信息,然后根据需要继续。您还可以将权限专门限制为 API 密钥“拥有”的内容(例如,用户特定的密钥)此处的完整文档。

还有有限的范围键(设置到期时间、使用次数、限制到任何先前的权限范围)。文档在这里。

TrueVault 还提供与 API 密钥分开的用户登录,如果您的用户使用登录凭据,这可能更适合。文档在这里。

我自己仍然很想弄清楚 TrueVault(至少在撰写本文时),因此请务必根据您的需要进行更多研究和审查。如果有限的范围界定对于我的需求“足够好”,我仍然会感到痛苦——我倾向于使用 AWS Lambda(或类似的)成为符合 HIPAA 的中间人,如果只是为了更好地隐藏我的访问令牌生成并隐藏它我的数据将进入 TrueVault 并添加一些“无服务器服务器端”数据验证。

于 2021-03-06T23:07:41.913 回答
0

我目前正在使用 AWS Lambda 作为解决方案。Lambda 符合 HIPPA,更多信息请点击此处Lambda也是一种低成本的解决方案。

这是我使用 Node.js 在 Lambda 上运行的代码示例。

var request = require('request-promise');
var _ = require('lodash');

function encodeBase64(str) {
  return (new Buffer(str)).toString('base64');
}

var baseUrl = 'https://api.truevault.com/v1/';
var headers = {
  'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
};
var req = request.defaults({
  baseUrl: baseUrl,
  headers: _.extend({
    Authorization: 'Basic  ' + encodeBase64('your api key:')
  }, headers),
  transform: function(body) {
    return JSON.parse(body);
  }
});

exports.handler = function(event, context) {
  req.post('users', {
    form: {
      username: event.email,
      password: event.password,
      attributes: encodeBase64(JSON.stringify({
        name: event.name
      }))
    }
  }).then(function() {
    context.succeed({user: user});
  }).catch(context.fail);
}
于 2018-01-12T04:49:16.347 回答