使用 Spring 3.1 的混合模式 X509 身份验证

Posted

技术标签:

【中文标题】使用 Spring 3.1 的混合模式 X509 身份验证【英文标题】:mix-mode X509 Authentication with Spring 3.1 【发布时间】:2013-04-14 16:08:48 【问题描述】:

我对 Spring 有点陌生,也是 SSL 身份验证的新手。

我的问题是我有一个 Web 应用程序,它可以很好地与基于表单的身份验证配合使用。我需要使用 SSL 客户端身份验证自动对我的应用程序的一部分进行身份验证。

到目前为止我做了什么。

    SSL启用tomcat(我可以访问https://mydomain.com:9443) 将客户端证书导入服务器信任库

    更改 server-xml 并在我的 server.xml 中设置 clientAuth="want"

    连接器端口="9443" 协议="HTTP/1.1" SSL启用=“真” maxThreads="150" 方案="https" 安全=“真” clientAuth="想要" sslProtocol="TLS" keystoreFile="c:\serverkeystore" keystorePass="ChangeIt" />

    在我的安全中的 http 下添加了 x509 subject-principal-regex="CN=(.*?)," user-service-ref="customUserDetailService" -上下文.xml

        ?)," user-service-ref="myUserDetailService" />
       
                   authentication-failure-url="/login.jsp?error=1" />
        
    添加 以保护 url myUserDetailService 正在实现 UserDetailsS​​ervice 并返回 UserDetails 对象(我用于基于表单的身份验证的同一类,基于数据库存储的用户名、密码、角色)。

我的问题是任何 URL 路径(即使使用 /upload)它总是向我显示 login.jsp 页面。

我正在使用 Spring 和 Spring security 3.1.3 和 tomcat 6.0.35

任何帮助将不胜感激。

【问题讨论】:

@Michael 抱歉,因为我们正忙于处理其他问题,所以我还不能尝试。我会尽快做。 你测试成功了吗? 【参考方案1】:

你必须分开问题:

    通过客户端证书验证所有/upload URLs 通过表单认证其他网址进行认证

以下配置将允许在 SpringSecurity 3.1 中单独解决这些问题:

<http pattern="/upload/**" >
    <intercept-url pattern="/*" access="hasRole('ROLE_USER')" requires-channel="https"/>
    <x509 subject-principal-regex="CN=(.?)," user-service-ref="myUserDetailService" />
</http>

<http use-expressions="true">
    <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <intercept-url pattern="/**" access="ROLE_USER"/>
    <form-login login-page="/login.jsp" 
           default-target-url="/index.jsp"
           authentication-failure-url="/login.jsp?error=1"  />
    <logout logout-url="/j_spring_security_logout" logout-success-url="/loggedout.jsp" delete-cookies="JSESSIONID"/>
</http>

【讨论】:

会试试迈克尔。谢谢!

以上是关于使用 Spring 3.1 的混合模式 X509 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

用于身份验证的 Grails Spring Security X509 和用于权限的 LDAP

Spring-导入和混合配置

GWT 开发模式 + Spring 3.1 + Hibernate 4.0.1 中的异常

在 xws-security for Spring-WS 中支持 X509PKIPathv1

Grails 中基于 RESTful 证书的 (X509) 登录身份验证

docker pull 失败报错:x509: certificate has expired or is not yet valid