我在 Apache 上使用mod_auth_kerb实现了 SSO 身份验证。我的配置是这样的:
<Location /login/ >
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate on
KrbAuthoritative on
KrbVerifyKDC on
KrbAuthRealm D.ETHZ.CH
Krb5Keytab /etc/HTTP.keytab
KrbSaveCredentials on
RequestHeader set KERBEROS_USER %{REMOTE_USER}s
</Location>
Run Code Online (Sandbox Code Playgroud)
我的问题是,没有require valid-user
, mod_auth_kerb 甚至不会尝试对用户进行身份验证并KERBEROS_USER
最终成为(null)
. 如果我添加require valid-user
,如果浏览器支持,用户会自动进行身份验证,但如果浏览器不支持 Kerberos Negotiate,则会显示一个丑陋的模式登录表单(ala HTTP Basic Auth)。
我想要实现的是,如果用户访问/login/
,mod_auth_kerb 会尝试通过 Kerberos Negotiate 对用户进行身份验证。如果失败,将向用户显示一个普通的 HTML 登录表单。
是否可以以这种方式配置 Apache/mod_auth_kerb?
我正在通过运行在 Apache(SLES 11.1 上的 Apache2)上的网站为 Active Directory 用户设置 SSO,并且在使用 Firefox 进行测试时,一切正常。但是当我尝试在 Internet Explorer 8 (Windows 7) 中打开网站时,我得到的只是
“错误的请求
您的浏览器发送了此服务器无法理解的请求。
请求头字段的大小超过服务器限制。
授权:协商【超长字符串】”
我的 vhost.cfg 看起来像这样:
<VirtualHost hostname:443>
LimitRequestFieldSize 32760
LimitRequestLine 32760
LogLevel debug
<Directory "/data/pwtool/sec-data/adbauth">
AuthName "Please login with your AD-credentials (Windows Account)"
AuthType Kerberos
KrbMethodNegotiate on
KrbAuthRealms REALM.TLD
KrbServiceName HTTP/hostname
Krb5Keytab /data/pwtool/conf/http_hostname.krb5.keytab
KrbMethodK5Passwd on
KrbLocalUserMapping on
Order allow,deny
Allow from all
</Directory>
<Directory "/data/pwtool/sec-data/adbauth">
Require valid-user
</Directory>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl.crt/hostname-server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/hostname-server.key
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我还确保删除了 cookie,并为 LimitRequestFieldSize 和 …
我想通过 mod_auth_kerb 在 Linux 上使用 Kerberos 和 Apache 2。
我将 .htaccess 添加到我的项目中,如下所示:
#SSLRequireSSL
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd Off
KrbAuthRealms DOMAIN.COM
Krb5KeyTab /etc/httpd/httpd.keytab
KrbLocalUserMapping On
require valid-user
Run Code Online (Sandbox Code Playgroud)
当我尝试在 IE 或 Firefox 上测试单点登录时,我在 apache 日志中收到以下错误:
[Thu Jan 19 21:03:27 2012] [error] [client 10.65.0.1] gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)
Run Code Online (Sandbox Code Playgroud)
我不知道它是什么以及我应该做什么才能让它发挥作用。
我的目标是让 REMOTE_USER 由 AD 用户名填充。但现在由于这个错误我无能为力......
我已经配置了 apache2 和 mod_auth_kerb。我以这种方式设置了我的 .htaccess
# cat .htaccess
AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd on
Krb5KeyTab /etc/httpd/httpd.keytab
require valid-user
Run Code Online (Sandbox Code Playgroud)
当我在 IE 中打开页面时,我在 apache 日志中收到以下错误:
gss_accept_sec_context() failed: Miscellaneous failure (, Key version number for principal in key table is incorrect)
Run Code Online (Sandbox Code Playgroud)
然后我可以通过基本身份验证设置密码和登录,这完全没问题。但是我无法通过票证进行身份验证。
# klist -k /etc/httpd/httpd.keytab
Keytab name: FILE:/etc/httpd/httpd.keytab
KVNO Principal
---- --------------------------------------------------------------------------
6 host/portal.domain.com@DOMAIN.COM
6 host/portal.domain.com@DOMAIN.COM
6 host/portal.domain.com@DOMAIN.COM
6 host/portal@DOMAIN.COM
6 host/portal@DOMAIN.COM
6 host/portal@DOMAIN.COM
6 PORTAL$@DOMAIN.COM
6 PORTAL$@DOMAIN.COM
6 PORTAL$@DOMAIN.COM
6 HTTP/portal.domain.com@DOMAIN.COM
6 HTTP/portal.domain.com@DOMAIN.COM
6 HTTP/portal.domain.com@DOMAIN.COM
6 HTTP/portal@DOMAIN.COM
6 …
Run Code Online (Sandbox Code Playgroud)