如何通过排队作业支持通过外部API安全创建用户帐户?

时间:2013-03-12 20:08:15

标签: api security encryption queue job-scheduling

所以这个问题正在深入研究安全性和加密问题,许多人可能还没有遇到这个问题。答案可能是理论上的。让我概述一下情景......

  1. 网站前端是通过后端API驱动的。后端有一个端点,用于处理包含usernamepassword的通用注册表单。它正在使用SSL。
  2. 后端API通过异步作业队列处理注册。队列不会将响应返回给API服务器。这是一个设置并忘记操作来排队注册。
  3. 排队的工作由工人接收。工作人员负责创建用户帐户。这些工作人员需要访问纯文本用户密码,以便他们可以使用密码触发第三方API注册调用。
  4. 因此,问题的真正症结在于将密码同步到第三方API,而不是将其暴露给窥探者。该队列存在无法再从全局POST数据直接访问明文密码的问题,这意味着它需要以某种方式存储在队列中。

    队列可以轻松存储哈希密码并将其直接复制到users表。但是,此解决方案不允许将密码与第三方API同步,因为它已经加密。我玩弄了双向加密,但我全心全意地担心密码容易被攻击者解密。

    有人能想出一种安全的方法来处理这种密码同步方案吗?

    队列是一项要求,并且假设任何有权访问服务器的人都可以读取该队列。密码不一定要同步;只要有安全的方法通过登录用户解密而不提供密码,第三方API的密码就可以是原始密码的推导。这主要是使用不支持SSO的第三方API模拟单点登录。

1 个答案:

答案 0 :(得分:0)

有几种方法可以同步密码:

  1. 两个auth存储都使用可逆加密,以便每个系统都可以提取实际值以发送到另一个系统;
  2. 两者都使用完全相同的加密方式,以便您通过加密文本发送,因此两者都可以理解。
  3. 一个系统是“主”,用户总是在其中进行身份验证,“从”系统只接收用户已登录的确认。这可以采用主机创建的机器生成密码的形式,以便在帐户中使用在奴隶上创造。
  4. 一个系统是所有其他系统调用帐户验证的“主”。与使用LDAP或MyOpenID类似。
  5. 使用多主密码同步可能会遇到一些问题,例如确保在用户更改密码时正确复制密码更改。

    在您的情况下,听起来用户从不直接与第三方API接口。如果这是准确的,请让用户对您的系统进行身份验证。在需要时生成第三方API密码,将其与帐户一起存储,并根据需要自动将其登录到其他系统。您的主密码可以存储在不可逆的加密中;但第三方必须使用可逆加密。队列永远不必拥有初始密码,而只需生成一个新密码并将其与本地帐户一起存储。