繁体   English   中英

Cas和Spring示例:我不理解“ setUserDetailsS​​ervice”

[英]Cas and Spring example: I don't understand “setUserDetailsService”

在此示例中: https : //www.baeldung.com/spring-security-cas-sso

有这段代码:

@Bean
public CasAuthenticationProvider casAuthenticationProvider() {

    CasAuthenticationProvider provider = new CasAuthenticationProvider();
    provider.setServiceProperties(serviceProperties());
    provider.setTicketValidator(ticketValidator());
    provider.setUserDetailsService(
      s -> new User("casuser", "Mellon", true, true, true, true,
        AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
    provider.setKey("CAS_PROVIDER_LOCALHOST_9000");
    return provider;
}

我不明白这部分内容:

provider.setUserDetailsService(
      s -> new User("casuser", "Mellon", true, true, true, true,
        AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
  1. 我们应该在这里放什么? 我是否应该创建自己的UserDetailsS​​ervice(如果是,如何?)? 我被期望一些“默认的cas用户详细信息服务” ...
  2. 该代码如何工作? 创建用户以提供UserDetailsS​​ervice?

这就是Spring安全性在更高层次上的工作方式。

用户尝试通过某种类型的UI(例如,CAS的一部分)进行身份验证。 用户界面将用户名/密码传递给Spring。 Spring最终将调用UserDetailService.loadUserByUsername并将用户名传递给它,如果用户存在,则UserDetailService将返回非null的UserDetails 在空的情况下UserDetails或非空一个不同的密码,Spring将无法通过验证。

CAS只是一个身份验证服务器,它保留了用户的存储方式。 您可以选择使用LDAP或数据库。 该选择基于UserDetailService不同实现。 再次查看javadoc 它具有您可以使用的默认实现的列表。

请参阅链接教程的第5部分。 它显示了如何更改CAS和Spring Boot应用程序以将数据库用作用户存储。 这里的关键是,为了使后端可以与CAS服务器一起针对存储在数据库中的用户使用,都需要进行适当的配置,以便针对数据库查找用户。 CAS是通过application.properties配置的,而Spring是通过UserDetailService

现在在评论中向您的问题提问:

客户为什么要为cas服务器如何存储用户而烦恼?

客户端不应理会UserDetailService 它仅由CAS保护的后端服务使用。

只是为了确保我紧紧抓住它:如果我只需要知道“该用户是否已连接?” 那么CAS就足够了,我将永远不会使用UserDetailService。 但是,如果我需要有关用户的一些信息(姓名,电话等),则可以调用UserDetailService进行加载(从db,ldap或其他任何方式)。

是的,没有。 您不需要将密码存储在UserDetails但是您需要能够为成功的CAS身份验证用户返回UserDetails 请参阅您的链接教程中的这一部分:

再次注意,服务器使用的数据库中的主体必须与客户端应用程序的主体相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM