没有用户服务的Spring Security X.509身份验证

Cza*_*zar 4 authentication spring-security client-certificates x509certificate x509

我在我的Web应用程序中使用Spring Security(v3.1.3)进行X.509身份验证.用户和角色存储在数据库中,但我实际上并不需要这样做,因为客户端证书的CN符合"[ROLE] - [USERNAME]"模式,这意味着我已经拥有证书本身的用户名和角色.那么如何在不费力的情况下消除数据库呢?我应该编写自己的用户服务实现,这将填充UserDetails,还是有更优雅的方法?

Sha*_*eep 5

是的,最简单的选择可能是编写自定义AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken>.实现将是这样的:

UserDetails loadUserDetails(PreAuthenticatedAuthenticationToken token) {
    X509Certificate certificate = (X509Certificate[)token.getCredentials();

    // Extract what you want from the certificate
    ...

    // Create the user information
    UserDetails user = ...

    return user;
}
Run Code Online (Sandbox Code Playgroud)

您应该能够直接在user-service-refnamespace属性中 使用对此bean的引用<x509 user-service-ref='yourUserServiceBean' />.