在 HTTP GET 查询参数中传递用户名和密码

Passing username and password in HTTP GET query parameters

我正在为我的应用程序构建 RESTful API,我希望它尽可能干净透明。

我需要创建一个身份验证端点,构建它对我来说最有意义,以便用户可以通过以下方式进行身份验证:

GET https://example.com/
    auth?identity=<username_or_email>&password=<password>

正如我所说,在查询参数中使用 HTTP GET 方法传递用户身份验证数据对我来说似乎非常干净。

但我想问一下它实际上有多安全。考虑到它将通过 SSL/TLS 进行加密,您认为像这样传输用户凭据是个好主意吗?

从安全的角度来看,将凭据作为查询参数或在 Authentication headers 中传递并不重要。两者基本上都是纯文本。所以你必须使用TLS。

从 REST 的角度来看,您的 URL 看起来像 RPC:您调用了一个接受两个参数 identitypassword 的方法 auth。 URL 代表什么 REST 资源?如果您使用相同的参数发出第二个 GET 请求会怎样?回应是什么?

好吧,我基本上是将 base64 字符串传递给服务器。 我的用户名和密码都是base64转换后传入Authorization Header

Authorization : "Basic --Value"

我发现这是将用户名和密码传递给服务器的最简洁的方式。

在另一端,服务器有一个名为 passport.Passport 的模块,提供不同类型的授权和身份验证,如基本、承载、令牌甚至您自己的自定义。

出于上述目的,我使用基本模块。

作为显示名称 said, both variants are basically plain text (even using base64 encoding). So you must use TLS or another protection like HMAC

但从另一方面来说,就 Server/Client 如何与 URL 一起工作而言,查询字符串通常不太安全。您可以阅读此 here or here。简而言之,您应该担心以下问题

  • URL 存储在网络服务器日志中
  • URL 存储在浏览器历史记录中
  • URL 在 Referrer 中传递 headers