您可以通过URL参数中的HTTP基本身份验证通过用户/通过吗?


153

我相信这是不可能的,但是我认识的人坚持认为它可行。我什至不知道尝试使用哪些参数,而且我也没有在任何地方找到此文档。

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

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



@sam-什么?完整的URL看起来如何?
ripper234

4
所有的规范ietf.org/rfc/rfc1738.txt(3.1)
涂抹

@sam-对不起,由于某种原因,我只是无法解析您的评论。
ripper234

Answers:


199

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

与您交谈的人可能正在考虑定制模块或代码,这些模块或代码可以查看查询参数并验证凭据。这不是标准的HTTP身份验证,而是特定于应用程序的事情。


1
谢谢,这正是我一直在寻找的...它不是GET参数,我可以将其制作为URL并不重要。
ripper234'3

42
仅供参考,IEChromehttp://username:password@example.com不再支持该格式,如果还没有其他人效仿的话,也不会感到惊讶。
TJ Crowder 2014年

11
在Chrome中实际上可以正常工作。只有IE被宠坏了。
Damien Overeemツ2014年

1
@DamienOvereem您使用什么版本的chrome?我使用的是Mac OS X 37,它似乎对我不起作用
克里斯·达默

11
从那以后,我了解到Chrome曾一度禁用它,但后来又重新启用了此功能。我还了解到,运行到这些类型的链接时,Safari会抛出钓鱼错误..基于URL的HTTP认证的基本时间到了..
达明Overeemツ

18

不建议在URL中传递基本身份验证参数

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

如何使用它写在这里: 基本访问身份验证

在这里您还可以阅读到,尽管某些浏览器仍支持它,但不建议在URL中添加基本授权凭证的建议解决方案。

另请阅读RFC 2617-HTTP身份验证中的第4.1章,以获取有关为什么不使用基本身份验证的更多详细信息。


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

使用OAuth或其他身份验证服务时,通常还可以通过查询字符串而不是授权标头发送访问令牌,如下所示:

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

以及如何将Authorization标头编码为URL?
womble

2
您所说的表格不是现在已经过时了吗?
womble

2
您用“为此目的有一个授权标头字段”回答的问题是询问如何将身份验证参数放入URL中。如果您无法将HTTP标头字段编码为URL(您不能这样做),那么您的答案是不合逻辑的。
womble

您能否列举URI标准中不赞成在URI中传递基本身份验证参数的地方?RFC 2396只说“不推荐”,因为在许多情况下,纯文本身份验证详细信息不是一个好主意(我同意),而RFC 7235没有提及。在我可以搜索的规格中没有任何地方说它已被弃用。
Lie Ryan

1
@Wilt:我要道歉,你的确是正确的。您关于规范已“更改”的提示促使我进一步研究(RFC一旦发布/编号,就永远不会被修改)。我只是发现RFC 2396实际上已被RFC 3986所取代,而我之前找不到。RFC 3986确实提到了用户名:密码语法的弃用:Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan

17

http:// username:password@example.com适用于FireFox,Chrome,Safari BUT,不适用于IE。

Microsoft知识库


2
此功能已从Chrome 19+中删除。请参阅code.google.com/p/chromium/issues/detail?id=123150
Moshe Katz

4
通过阅读该错误报告,它被重新添加到Chrome 20中。当然,如果不是这样,我希望看到很多人继续抱怨它。
womble

我现在为Internet Explorer请求它:connect.microsoft.com/IE/feedback/details/873575/…。用例略有不同,但是解决了相同的问题;)
SimonSimCity 2014年

如果密码包含“ @”,则@Diago无效。它会带来致命错误,有人可以告诉我我们如何一次提供用户名和密码
Ashish Jain

@AshishJain-我会尝试@将密码转义为%40。(不过,我不知道这种方法是否可行,并且可能取决于服务器或浏览器/服务器的组合。)
David Moles

0

(显然)可以在GET参数中发送任何字符串,尽管不建议发送登录名和密码,因为这样做可以使其高度可见,尤其是不在AJAX请求中时。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.