gpt4 book ai didi

javascript - 保护 HTTP API - 无用户密码提示并避免暴露私钥

转载 作者:行者123 更新时间:2023-11-30 06:42:45 25 4
gpt4 key购买 nike

我正在研究通过 HTTP 公开的 API,这些 API 将由合作伙伴公司使用并部署到他们的众多客户。

在某些情况下,客户端将基于浏览器。这是我的主要关注点,但我可能会在客户端是 Windows 应用程序的情况下应用相同的模式。我觉得当它是一个 Windows 应用程序而不是一个基于浏览器的应用程序时,在客户端上保护私钥的范围更大。因此,发生的通信是从合作伙伴应用程序呈现的浏览器页面到我们托管 API 的服务器。

最重要的是,我们无法提示最终用户输入凭据,而必须依赖将随每个请求一起传递的存储密码/ key / token 。我担心的是,我想阻止合作伙伴公司将此 token 烘焙到客户端代码中。以下是对该场景的高级描述。

  1. 合作伙伴在我们这里建立一个帐户(手动过程),执行必要的开发工作以在他们的产品中使用 API,然后将其推广给他们的客户。
  2. 然后客户运行该产品并通过向导在我们这里建立帐户。此时我们可以提示他们输入用户名和密码,但以后对 API 的所有请求都不应提示实际最终用户输入凭据。
  3. 然后,他们执行无数业务流程,在许多不同的用户环境下在许多工作站上调用我们的 API。我们不关心个人用户信息。

为了这个问题的目的,我将跳过第 1 步并专注于第 2 步和第 3 步。

我目前正在努力保护这个 API,并提出了以下设计:

  • 无处不在的 HTTPS(所有请求都使用 SSL/TLS)
  • 所有 POST 请求都使用 CSRF token
  • 在第 2 步中,当客户创建帐户时,我们会向他们提供客户授权码。合作伙伴应对其应用程序进行编码以将此授权码存储在服务器上。
  • 在以后调用我们的 API 之前,他们会在我们的 javascript 库上调用 Init 函数并提供回调,例如“GetAuthToken”。
  • 在每次调用我们的 API 时,我们都会检查我们是否有授权 token (在服务器上),如果没有,我们会返回错误并调用回调。
  • 实现回调时,合作伙伴应使用 HTTPS 调用其服务器以检索 token 。此请求将受到他们的正常身份验证,因此假设如果用户在他们的系统中经过身份验证,那么他们可以检索身份验证 token 。
  • 我们收到 Auth Token,调用我们的服务器来验证它,然后设置一个包含该 token 的 HTTPOnly cookie。
  • 当 cookie 过期时,我们再次调用 GetAuthToken 回调。
  • 使用 postMessage 管理跨域问题
  • 我们可以使授权 token 可撤销

我们这里有一种联合安全形式,如果用户通过合作伙伴的身份验证,那么我们假设他们可以访问我们的 API。我能想到的避免将私钥/授权 token 烘焙到客户端代码中的唯一方法是这种回调机制。

我是不是把它复杂化了?还有其他更简单的方法吗?我意识到,如果任何一个站点对 XSS 开放或受到恶意软件的破坏,所有赌注都将失败,但至少通过不将私钥呈现为 javascript 或标记,用户无法右键单击查看源代码并告诉所有人私钥。

编辑:发现这个问题。最佳答案描述的内容与我描述的类似,尽管提到了我不想强制合作伙伴实现的 WIF(他们甚至可能没有运行 Windows)。不过仍然希望对我的方法有反馈...

Web Application - User Authentication Across Domains

最佳答案

我知道您要求简化,但您是否已经探索了 SAML 联盟,其中每个合作伙伴在启动应用程序时都向您声明他们的身份,并且您使用您的身份验证 token 对他们进行 cookie?它完全避免了 JS 的参与,并与 SSL + CSRF token 结合使用,让您处于一个好位置。

关于javascript - 保护 HTTP API - 无用户密码提示并避免暴露私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com