簡體   English   中英

帶有SPNEGO SSO的Tomcat 6仍提示輸入登錄名和密碼

[英]Tomcat 6 with SPNEGO SSO still prompts for login and password

我正在嘗試使用SPNEGO過濾器為Tomcat(6)設置Windows Active Directory SSO。

我已按照示例中的步驟進行設置,但是當我嘗試訪問hello_spnego.jsp時,仍然提示我輸入登錄名和密碼。

我可能丟失了一些東西,所以這是我的conf:

web.xml(與spnego相關):

<filter>
    <filter-name>SpnegoHttpFilter</filter-name>
    <filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>
    <init-param>
        <param-name>spnego.allow.basic</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.allow.localhost</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.allow.unsecure.basic</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.login.client.module</param-name>
        <param-value>spnego-client</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.login.server.module</param-name>
        <param-value>spnego-server</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.krb5.conf</param-name>
        <param-value>${catalina.home}\conf\krb5.conf</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.login.conf</param-name>
        <param-value>${catalina.home}\conf\login.conf</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.preauth.username</param-name>
        <param-value>aqw</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.preauth.password</param-name>
        <param-value>pass</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.prompt.ntlm</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.logger.level</param-name>
        <param-value>1</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SpnegoHttpFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

krb5.conf:

    [libdefaults]
default_realm = TEST.LOCAL
default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
forwardable=true

[realms]
TEST.LOCAL = {
    kdc = SERVER_WITH_AD:88
    default_realm = TEST.LOCAL
}

[domain_realm]
dev.local = TEST.LOCAL
.dev.local = TEST.LOCAL

login.conf:

spnego-client {
    com.sun.security.auth.module.Krb5LoginModule required;
};

spnego-server {
    com.sun.security.auth.module.Krb5LoginModule required
    storeKey=true
    isInitiator=false
    useKeyTab=true
    keyTab="C:\Osys\QuartisTools\Tomcat\conf\aqw.keytab"
    ;
};

編輯:這是我所做的:

  • 我在服務器SERVER_WITH_AD上創建了一個用戶(aqw)
  • 我使用以下命令設置他的SPN:

    setspn -A HTTP / SERVER_WITH_AD.Test.local aqw

  • 我使用以下命令為他創建了一個密鑰表文件:

    ktpass / out c:\\ aqw.keytab / mapuser aqw@Test.local / princ HTTP/TOMCAT_SERVER@Test.local / pass * / kvno 0

  • 我將密鑰表文件傳輸到Tomcat / conf。

  • 我將login.conf和krb5.conf添加到Tomcat / conf中。
  • 我編輯了用戶帳戶(在AD的用戶界面上)以接受AES 128位加密。
  • 在從SO的另一個問題中找到信息后,我從此頁面將JCE jars添加到了我的jdk1.7.0_51 / jre / lib / security中。

附加信息:
-SERVER_WITH_AD運行Windows Server 2012(x64)。
-TOMCAT_SERVER運行Windows 7 Ultimate(x64)。

編輯2:正如Whome所建議的,我將地址添加到了受信任站點的列表中。

在某個時候,我不再看到用戶名/登錄提示,但是現在我在Tomcat中出現錯誤(顯示為HTTP 500錯誤):
KrbException:無效參數(400)-找不到合適類型的密鑰來解密AP REP-具有HMAC SHA1-96的AES256 CTS模式
因此,它可能找不到我的密鑰表。

在出現“找不到密鑰”錯誤之后,我已經重讀了conf文件,並根據Whome的建議將文件名設置為Unix風格。 然后,我將它們移動到conf文件旁邊,以使其具有最短的路徑。 我還添加了一個主體, 如此處所述的服務器密鑰表測試過程: ,因此我的login.conf為:

spnego-client {
    com.sun.security.auth.module.Krb5LoginModule required;
};

spnego-server {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    keyTab="appserver.keytab"
    principal=aqw
    storeKey=true;
};  

這給了我一個校驗和錯誤,所以我重新生成了我的密鑰表文件。

這又顯示了另一個錯誤:
javax.security.auth.login.LoginException:沒有可用於從用戶那里獲取身份驗證信息的CallbackHandler

因此,我編輯了web.xml以允許使用不安全的基本NTLM提示符和本地主機。 像這樣:

    <init-param>
        <param-name>spnego.prompt.ntlm</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>spnego.allow.basic</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>spnego.allow.localhost</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>spnego.allow.unsecure.basic</param-name>
        <param-value>true</param-value>
    </init-param>

奇怪的是,它顯示了另一個例外:
javax.security.auth.login.LoginException:沒有可用於從用戶那里獲取身份驗證信息的CallbackHandler

我之所以說是奇怪的,是因為我的理解是,通過允許NTLM提示,我正在授權另一種進行身份驗證的方法。

最奇怪的部分是今天早上,它起作用了。 我不知道為什么 重新啟動服務器后它仍然可以工作。 我得到了“你好用戶!” 與正確的用戶的消息。 但是,HelloKeytab測試類無法正常工作。

編輯:最后,它停止工作並且無法正常工作。 我一直收到校驗和錯誤。 所以我最終使用了Waffle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM