FCGI returns No Auth/doesn 500 错误未在基本身份验证上进行身份验证

FCGI returns 500 error on No Auth/doesn't authenticate on Basic Auth

我在使用 C++ 中的 FCGI 时遇到一些问题。

最初,它是一个使用 Basic Auth 来验证任何传入请求(使用某些验证方法等)的应用程序。

我们现在正尝试将 SSO 合并到安装中,使用 OpenAM 作为 IDP。

我们已经能够轻松地与 OpenAM 通信(就使用 Lasso 从 SP 向 IDP 发送重定向消息而言),但真正的困难在于 IDP 重定向回来的时候。

如果在 Apache 中启用了基本身份验证,则不会通过授权 headers,并且不会验证用户。

如果 Basic Auth 被关闭,FCGI 会抛出一个异常说明:

[Mon Mar 09 14:33:33 2015] [error] [client 10.12...] FastCGI: comm with server "/var/www/fcgi" aborted: protocol error: invalid version: 10 != FCGI_VERSION(1), referer: "http://...:8080/OpenAM-12.0.0/SSORedirect/metaAlias/idp?ReqID=...&index=null&acsURL=&spEntityID=https%3A%2F%2F...%2F&binding="
[Mon Mar 09 14:33:33 2015] [error] [client 10.12...] FastCGI: incomplete headers (0 bytes) received from server "/var/www/fcgi", referer: "http://.../OpenAM-12.0.0/SSORedirect/metaAlias/idp?ReqID=...&index=null&acsURL=&spEntityID=https%3A%2F%2F...%2F&binding="

我的 fcgi.conf 看起来像这样:

FastCGIExternalServer /var/www/fcgi -host 127.0.0.1:8082 -idle-timeout 3600 -appConnTimeout 3600
    <Location "/fcgi">
        AuthType Basic
        AuthName "Protected"
        AuthGroupFile None
        FastCgiAuthorizerAuthoritative Off
        FastCgiAuthenticatorAuthoritative Off
        FastCgiAuthenticator /var/www/fcgi
        Require valid_user
    </Location>

您似乎想要重播受保护应用程序的用户密码。我不相信有一种方法可以强制浏览器发送某些请求 headers 以及请求(除了进行 Ajax 调用)。

根据您的描述,您似乎正在使用 Apache,不幸的是,Apache 目前不支持 Basic Auth(带密码重放),目前只有 IIS 代理实现了它。

我认为 OpenIG 可以解析您的 use-case,因为它支持密码重放(类似于 IIS 代理),但这意味着您需要让 OpenIG 在前面充当反向代理您的 FCGI 应用程序。