Safari(iPad 和 iPhone)上的 Lighttpd mod_auth 身份验证困难

Safari(iPad 和 iPhone)上的 Lighttpd mod_auth 身份验证困难

我已经在嵌入式设备上设置了 lighttpd,并配置了模块,lighttpd.conf 当从 PC 上的 Chrome 或 Firefox 访问网页时,系统会要求我输入用户名和密码,输入用户名和密码后,页面就会加载。

当我在 iPad 或 iPhone 浏览器上执行相同操作时,我也会出现身份验证对话框,但由于某种原因,它会反复弹出。

使用该mod_accesslog模块我能够看到,iPad 仍然会在未使用身份验证的情况下发出请求,这会导致HTTP 401某些请求:

192.168.2.33 192.168.2.247 wwwX [10/Apr/2011:16:01:30 +0200] "GET /[...] HTTP/1.1" 304 0 "http://192.168.2.247/" ...
192.168.2.33 192.168.2.247 wwwX [10/Apr/2011:16:01:30 +0200] "GET /[...] HTTP/1.1" 304 0 "http://192.168.2.247/" ...
192.168.2.33 192.168.2.247 - [10/Apr/2011:16:01:33 +0200] "GET /[...] HTTP/1.1" 401 351 "http://192.168.2.247/" ...
192.168.2.33 192.168.2.247 - [10/Apr/2011:16:01:56 +0200] "GET / HTTP/1.1" 401 351 "-" ...

我也尝试添加mod_access模块但没有任何改变。

问题出在浏览器、lighttpd网络服务器或其模块/配置上吗?如何修复?

我的文件的相关部分lighttpd.conf如下所示:

# mod_auth must be loaded before mod_fastcgi
server.modules = (
    "mod_auth",
    "mod_cgi",
    "mod_fastcgi"   
)

mod_auth 配置部分如下所示:

auth.debug = 0
auth.backend = "plain"
auth.backend.plain.userfile = "/tmp/lighttpd-plain.user"
auth.require = (
    "/" =>
    (
        "method" => "digest",
        "realm" => "myRealm",
        "require" => "valid-user"
    )
)

编辑:

我忘记提到的一件事是,网页使用 jQuery 发出 AJAX 请求。请求不会设置usernamepassword变量。在所有浏览器上,在用户通过浏览器弹出对话框进行身份验证后,此操作均可顺利运行。

我认为 Safari 上的 AJAX 请求可能是不使用任何凭据的请求,因此会出现 401 等错误。有没有办法让它使用用户在对话框中提供的凭据?

答案1

auth.require = (
    "/" =>
    (
        "method" => "digest",
        "realm" => "myRealm",
        "require" => "valid-user"
    )
)

这是因为您使用的是摘要式身份验证,而某些浏览器不支持该身份验证或存在错误。您应该使用基本方法(不安全)或使用 cookie 实现自己的身份验证。如果您对安全高效的身份验证解决方案感兴趣(内置保护措施,防止暴力攻击和帐户共享),请查看我们的网站:finesec.com

相关内容