在 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:您调用了一个接受两个参数 identity
和 password
的方法 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
我正在为我的应用程序构建 RESTful API,我希望它尽可能干净透明。
我需要创建一个身份验证端点,构建它对我来说最有意义,以便用户可以通过以下方式进行身份验证:
GET https://example.com/
auth?identity=<username_or_email>&password=<password>
正如我所说,在查询参数中使用 HTTP GET 方法传递用户身份验证数据对我来说似乎非常干净。
但我想问一下它实际上有多安全。考虑到它将通过 SSL/TLS 进行加密,您认为像这样传输用户凭据是个好主意吗?
从安全的角度来看,将凭据作为查询参数或在 Authentication
headers 中传递并不重要。两者基本上都是纯文本。所以你必须使用TLS。
从 REST 的角度来看,您的 URL 看起来像 RPC:您调用了一个接受两个参数 identity
和 password
的方法 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