题 你能在URL参数中传递HTTP基本身份验证的用户/通行证吗?


我相信这是不可能的,但我认识的人坚持认为它有效。我甚至不知道要尝试什么参数,我没有在任何地方找到这个记录。

我试过了 http://myserver.com/~user=username&password=mypassword 但它不起作用。

你能否确认通过HTTP参数(GET或POST)传递用户/传递实际上是不可能的?


124
2018-03-21 11:16




用户:pass@example.com - Smudge
@sam - 什么?完整的URL如何? - ripper234
所有在规范中 ietf.org/rfc/rfc1738.txt (3.1) - Smudge
@sam - 对不起,我因某些原因无法解析你的评论。 - ripper234


答案:


确实无法通过标准HTTP身份验证中的查询参数传递用户名和密码。相反,您使用特殊的URL格式,如下所示: http://username:password@example.com/  - 这将在标准HTTP“授权”标头中发送凭据。

您与之交谈的人可能正在考虑查看查询参数并验证凭据的自定义模块或代码。这不是标准的HTTP身份验证,但它是特定于应用程序的东西。


167
2018-03-21 11:38



谢谢,这正是我所寻找的......它的GET参数并不重要,只是我可以将它制作成URL。 - ripper234
仅供参考 http://username:password@example.com 两者都不再支持format IE 要么 铬如果其他人也没有这样做,他们会不会感到惊讶。 - T.J. Crowder
实际上在Chrome中工作正常。只有IE是一个被宠坏的小子。 - Damien Overeem ツ
@DamienOvereem你在哪个版本的chrome?我在mac os x 37上它似乎对我不起作用 - Chris DaMour
我已经了解到Chrome已将其禁用一段时间,但稍后会重新启用此功能。我还了解到Safari在运行这些类型的链接时会抛出网络钓鱼错误。基本上,基于URL的http身份验证的时间已经过去了。 - Damien Overeem ツ


HTTP://用户名:password@example.com 适用于FireFox,Chrome,Safari但不适用于IE。

Microsoft知识库


16
2018-01-23 10:50



此功能已从Chrome 19+中移除。看到 code.google.com/p/chromium/issues/detail?id=123150 - Moshe Katz
通过我阅读该错误报告,它被添加回Chrome 20.当然,如果不是这样的话,我希望看到很多人继续抱怨它。 - womble♦
我现在请求Internet Explorer: connect.microsoft.com/IE/feedback/details/873575/...。用例略有不同,但解决了同样的问题;) - SimonSimCity
@Diago如果密码包含'@',那么它不起作用。它会给出致命的错误,任何人都可以告诉我如何立即提供用户名和密码 - Ashish Jain
@AshishJain - 我会尝试逃避 @ 在密码中 %40。 (我不知道这是否有效,它可能取决于服务器或浏览器/服务器的组合。) - David Moles


不推荐在URL中传递基本身份验证参数

为此目的有一个Authorization标头字段,请在此处查看: http标头列表

如何使用它写在这里: 基本访问认证

在那里,您还可以阅读,虽然某些浏览器仍然支持它,但建议不要在网址中添加基本授权凭据。

阅读 RFC 2617中的第4.1章 - HTTP身份验证 有关为何不使用基本身份验证的详细信息。


在查询字符串中传递身份验证参数

使用OAuth或其他身份验证服务时,您通常也可以在查询字符串中而不是在授权标头中发送访问令牌,例如:

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD

14
2017-09-24 07:55



如何将Authorization标头编码为URL? - womble♦
你说的表格现在已被弃用了吗? - womble♦
您回答“为此目的有一个授权标头字段”的问题是询问如何放置身份验证参数 进入URL。如果您无法将HTTP标头字段编码为URL(您不能),那么您的答案是不合理的。 - womble♦
您是否可以引用URI标准中的哪个位置表示不推荐在URI中传递基本身份验证参数? RFC 2396仅表示“不推荐”,因为在许多情况下,纯文本中的身份验证详细信息并不是一个好主意(我同意),而RFC 7235则没有提到任何内容。我可以搜索的规格中没有任何地方说它已经被弃用了。 - Lie Ryan
@Wilt:我要道歉,你确实是对的。你暗示规范被“改变”的暗示促使我进一步调查(RFC一旦发布/编号就永远不会被修改)。我刚刚发现RFC 2396实际上已经被取代了 RFC 3986,我以前找不到。 RFC 3986确实提到了用户名:密码语法的弃用: Use of the format "user:password" in the userinfo field is deprecated. - Lie Ryan


(显然)可以在GET参数中发送任何字符串,但不建议发送登录名和密码,因为它可以使其高度可见,特别是如果它不在AJAX请求中。

但是,您需要对服务器页面进行编码以提取登录名和密码,然后以任何所需的方式验证和使用它们。


0
2017-09-11 08:22