security - 在 cookie 中存储 API 的用户名和密码?

标签 security http cookies https

我编写了一个 Web 应用程序,它与不同域中的 API 接口(interface)。

此 API 请求某些调用的用户名和密码(涉及 POST,例如将照片上传到 API)。对于这些调用,API 使用 https。

有没有一种方法可以将用户名和密码存储在网络应用程序中,这样用户就不必在每次上传照片时都重复登录?

这是我能想到的:

  1. 显而易见的方法是将两者都粘贴在 cookie 中,但显然这是一个安全漏洞,无论是明文还是散列。
  2. 如果它是一个安全的网站,我可以使用 session ID:我可以说服 API 所有者允许 session ID,还是这不可能跨域?

也许我只需要求用户在每次调用 API 时重新输入用户名和密码。

谢谢!

最佳答案

如果我正确理解您的架构,您的用户会将 API 调用发送到在不同域中运行的服务。您不是此请求的中间人,您只是提供接口(interface),例如作为 Web 应用程序中的表单字段。用户可以在您不知道的情况下发送 API 调用。

在那种情况下,如果不在浏览器中存储某种身份验证信息(cookie、表单字段等)或让您的用户为每个请求输入这些信息,就无法实现这一点。它们必须来自某个地方,并且您的服务器不参与请求。

您可以做的是改变架构并开始扮演中间人角色,就像代理人一样。让用户将他们的请求发送到您的 Web 应用程序,而不是直接与服务通信,而不仅仅是提供接口(interface)。您的 Web 应用程序添加凭据并将请求转发到服务。服务的响应将发送到您的 Web 应用程序,该应用程序可以将其再次重定向到用户。

在这种情况下,您的 Web 应用程序负责身份验证。如果发送请求的用户已被识别并具有所需的权限,则您的 Web 应用程序会将凭据添加到请求中。该服务的凭据仅从您的 Web 应用程序传递到该服务,它们甚至可以对用户本人隐藏。

这样的变化当然有几个含义。您的 Web 应用程序的负载会增加,逻辑会变得更加复杂。必须考虑这些权衡。

关于security - 在 cookie 中存储 API 的用户名和密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5805994/

相关文章:

asp.net-core - 声明类型 URL

c# - ASP.NET 身份验证允许/阻止页面访问并同时显示/隐藏链接

c - 解析 HTTP header

asp.net-mvc - 所需的防伪 cookie "__RequestVerificationToken"不存在。微 Controller 5

authentication - IdentityServer4 客户端 - 在 CookieAuthenticationEvents 上刷新访问 token

mysql - 打开 MS SQL TCP 端口(安全)

android - 获取每个提供商和服务的所有加密算法

c++ - 如何从 libcurl 中的 http header 中删除 Accept

java - 在多个类中重用 Asynctask

PHP Curl 获取下载文件大小