基本身份验证用户名中的特殊字符不适用于 Chrome,但适用于 IE 和 Firefox

Posted

技术标签:

【中文标题】基本身份验证用户名中的特殊字符不适用于 Chrome,但适用于 IE 和 Firefox【英文标题】:Special Characters in Basic Authentication username do not work with Chrome but works in IE and Firefox 【发布时间】:2017-09-24 16:01:16 【问题描述】:

我有一个配置了基本身份验证和 LDAP 的 Web 服务器。通常,我可以使用包含所有 3 个浏览器的英文字母的用户名登录。但是,如果用户名包含特殊字符(例如 RÈM WÉB 等德国名称),Web 服务器会返回 401,我会再次弹出身份验证,即 apache 无法验证。

检查 apache access.log 后,我可以看出当我从 firefox 和 chrome 登录时,编码似乎不同。这种编码是由浏览器决定的还是由网络服务器决定的?我认为这是浏览器导致的,Firefox 可以正常工作。我在哪里可以在 chrome 中设置此编码方案?

另外,为了确认它是浏览器的问题,我可以看到在 Firefox 和 Chrome 中发送的授权标头对于同一用户是不同的。显然,浏览器没有使用相同的方案对标头进行编码。有什么建议吗?

更多调试表明 firefox(以及 IE)使用 ISO8859-1 进行编码,而 chrome 使用 UTF-8。

即使 Apache Web 服务器多次尝试使用(如果 ISO8859-1 返回 401,它应该使用 UTF-8 再次尝试),我也可以。浏览器或网络服务器解决方案都可以。

【问题讨论】:

尝试使用 apache 指令设置默认 meta charset,阅读此内容并告诉我它是否有效 httpd.apache.org/docs/current/mod/core.html#adddefaultcharset 【参考方案1】:

尝试更改登录页面上的字符集以使用 ISO8859-1

<meta charset="ISO8859-1" />

【讨论】:

我们没有登录页面。直接使用身份验证弹出窗口。如果登录成功,apache会重定向到主页。 你试过这个***.com/questions/913869/… 吗? Apache 中的此设置适用于响应内容类型,而不适用于请求标头。 如果我正确阅读了@MichielvanOosterhout 的答案,您将必须检测除 ISO8859-1 以外的编码并正确解码***.com/questions/7242316/…

以上是关于基本身份验证用户名中的特殊字符不适用于 Chrome,但适用于 IE 和 Firefox的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式验证规则,以避免特殊字符不适用于 laravel 中的文本字段

Azure Api 规则不适用于使用具有身份验证基本和身份验证证书的默认助手

中间件身份验证不适用于 Web Laravel 5.2

Windows 身份验证不适用于 SQL Server

next() 中间件不适用于令牌身份验证

在查询字符串中嵌入用于 HTTP 基本访问身份验证的用户 + 密码数据