【问题标题】:Escaping username characters in basic auth URLs在基本身份验证 URL 中转义用户名字符
【发布时间】:2011-10-06 19:16:50
【问题描述】:

使用http基本认证时,可以在URL中传递用户名,例如

http://david@foo.com/path/

但现在假设用户名是电子邮件地址,例如大卫@company.com。这样做显然是模棱两可的:

http://david@company.com@foo.com/path/

有没有办法转义用户名中的@字符?我尝试了标准的 URL 编码:

http://david%40company.com@foo.com/path/

但这并没有做到。

【问题讨论】:

  • 您不能在 URL 中使用 @。还是我误会了?
  • 我知道我参加聚会有点晚了,但你只是错过了密码部分吗?标准语法应该是http(s)://user:pass@host。所以在你的情况下应该是http(s)://david%40company.com:Y0ur%24up3r%243cur3P%40%24%24w0rd@foo.com
  • @FatalMerlin 您既可以使用用户名,也可以使用用户名和密码。虽然我认为这与逃避问题是正交的。

标签: http basic-authentication


【解决方案1】:

根据RFC 3986,第 3.2.1 节,需要进行百分比编码:

  userinfo    = *( unreserved / pct-encoded / sub-delims / ":" )

看起来像

http://david%40company.com@foo.com/path/

是对的。你想在哪里读它?也许您需要手动解码该值?

【讨论】:

  • 我有自己的服务器端代码来处理凭据。我需要调试它,看看当我以这种方式逃跑时我收到了什么。我会跟进的!
  • 客户端似乎不能很好地使用该语法。例如IE9 甚至在发送任何请求之前都会阻止它,并给出错误“Windows 找不到'david%40company.com@foo.com/path'。请检查拼写并重试。”。这让我相信实际上并不支持这种语法,尽管从 RFC 中看起来是这样。
  • 有趣。我们尝试使用 Drupal 的 drupal_http_request 获取 URL 的这种精确语法,但它没有让用户登录。 (我们已经解决了这个问题,但我还是出于学术兴趣来搜索。)
猜你喜欢
  • 2016-04-07
  • 2018-11-10
  • 2021-12-06
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多