当前位置: 首页 > 知识库问答 >
问题:

带有SPNEGO SSO的Tomcat 6仍然提示输入登录和密码

金飞翼
2023-03-14

我正在尝试使用SPNEGO筛选器为Tomcat(6)设置Windows Active Directory SSO。

<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>
    [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
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"
    ;
};

编辑:以下是我所做的:

>

  • 我在服务器上创建了一个用户(aqw),SERVER_WITH_AD
  • 我使用以下命令设置他的SPN:

    setspn-http/server_with_ad.test.local aqw

    在某个时候,我已经不再看到用户名/登录提示符,但我现在在Tomcat中得到错误(显示为HTTP 500错误):
    krbexception:无效参数(400)-找不到合适类型的密钥来用HMAC SHA1-96解密AP REP-AES256 CTS模式
    ,所以它可能找不到我的keytab。

  • 共有1个答案

    舒赞
    2023-03-14

    在出现“无法找到密钥”错误后,我根据Whome的建议重新修改了conf文件,将文件名设置为Unix风格。我把它们移到conf文件旁边,以获得尽可能短的路径。我还添加了一个主体,就像在这里描述的服务器keytab测试过程中一样,因此我的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;
    };  
    

    这给了我一个校验和错误,所以我重新生成了我的keytab文件。

    这又显示了一个不同的错误:
    javax.security.auth.login.LoginException:没有可用于从用户获取身份验证信息的CallbackHandler

        <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>
    

    最奇怪的是今天早上,它起作用了。我不知道为什么。重新启动我的服务器后它仍然工作。我收到“你好用户!”消息与正确的用户。但是,HelloKeytab测试类不起作用。

    编辑:最后,它停止工作,不能让它工作。我一直收到校验和错误。所以我最后用了华夫饼。

     类似资料:
    • 我有一个专家项目,它使用slf4j和日志作为记录器。我可以看到这两个工件都在我的专家依赖关系树项中。但是每当我试图运行我的项目时,我都会不断收到提示: SLF4J:加载类“org.SLF4J.impl.StaticLoggerBinder”失败。SLF4J:默认为无操作(NOP)记录器实现SLF4J:请参阅http://www.slf4j.org/codes.html#StaticLoggerBi

    • 我试图设置AWS Cognito用户池与无密码登录以下这篇文章。但是,条件之一是“只允许自定义身份验证”。但是我需要我的应用程序允许用户使用其他提供商(oAuth和SAML)和无密码登录。 如何确保用户不能以某种方式使用在上述过程中生成的随机密码登录?还是有不同的方法?

    • 如何配置PostgreSQL以允许默认postgres用户在没有本地主机密码的情况下登录? 还有几个类似的问题,比如这个,这个,但是修改的建议没有一个对我起作用。但是,根据我对规则的理解,我应该可以使用或选项来实现这一点。 我正在尝试运行以下命令:

    • 问题内容: 我经常发现自己需要编写一些脚本,这些脚本必须以普通用户身份执行某些部分,而以超级用户身份执行其他部分。我知道在SO上有一个类似的问题,答案是两次运行相同的脚本并以sudo的身份执行,但这对我来说还不够。有时,在执行sudo操作后,我需要恢复为普通用户身份。 我已经在Ruby中编写了以下代码来做到这一点 不幸的是,如果用户输入了错误的密码,则使用该代码会使脚本崩溃。理想情况下,它应该使用

    • 问题 你写了个脚本,运行时需要一个密码。此脚本是交互式的,因此不能将密码在脚本中硬编码, 而是需要弹出一个密码输入提示,让用户自己输入。 解决方案 这时候Python的 getpass 模块正是你所需要的。你可以让你很轻松的弹出密码输入提示, 并且不会在用户终端回显密码。下面是具体代码: import getpass user = getpass.getuser() passwd = getpa

    • 问题内容: 我有一个相当简单的登录表单,该表单随jQuery AJAX请求一起提交。当前,提交表单的唯一方法是按下“登录”按钮,但是我希望能够在用户按下“ Enter”时提交表单。 我只使用jQuery AJAX请求完成表单提交,但是我不确定要在用户按下“ Enter”键时提交表单也需要进行哪些修改。 HTML: JavaScript: 摘录自login.php: 问题答案: 在表单中添加一个ID