繁体   English   中英

在 Spring 授权服务器中是否有 OIDC Session 管理和注销机制的实现,用于实现 Single Sing On?

[英]Is there any implementation of OIDC Session Management and Logout mechanism in Spring Authorization Server for implementing Single Sing On?

我正在尝试使用 Spring 授权服务器实现 Single Sing On,该授权服务器分别基于 oAuth2 和 OIDC 进行授权和身份验证,但根据 Spring 授权服务器功能列表 OIDC 支持未完全集成。 主要是session管理和注销部分,没找到。 另外,是否有任何解决方法可以实现 sso 和注销?

Feature List URL: https://docs.spring.io/spring-authorization-server/docs/current/reference/html/overview.html

这些功能仍在积压中,但尚未计划(截至撰写本文时)。 分别参见#58#266以了解这些功能的进展。

鉴于这两个功能的规范都有很多部分,我想尝试将它们完全符合规范的实现作为 SAS 的扩展会有点麻烦(尽管我确信这是可能的) . 相反,您可以选择注销功能的最小子集作为入门方式。

使用 Spring 安全配置,您可以以自定义方式配置注销端点。 这里有一些伪代码可以帮助您入门:

@Bean
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests((authorize) -> authorize
            .anyRequest().authenticated()
        )
        .formLogin(Customizer.withDefaults())
        .logout((logout) -> logout
            .logoutRequestMatcher(new OrRequestMatcher(
                new AntPathRequestMatcher("/logout", "GET"),
                new AntPathRequestMatcher("/logout", "POST")
            ))
            .addLogoutHandler((request, response, authentication) -> {
                // Logic to validate an id_token_hint, client_id, etc.
                // Throw exception in case of invalid request
            })
            .logoutSuccessHandler((request, response, authentication) -> {
                // Get state and calculate redirect for logout success back to client
                // http://127.0.0.1:8080/logout?success&state=...
                // new SimpleUrlLogoutSuccessHandler()...
            })
        );
    return http.build();
}

这假设实施了某种验证以防止 CSRF、拒绝服务等。您还可以选择添加注销确认页面作为身份验证服务器的单独端点,当用户单击“确认”时重定向到注销端点按钮等

要使用它,您只需从客户端应用程序重定向到注销确认页面,该页面在确认时重定向到注销端点,然后重定向回客户端(然后可以自动注销客户端)。

暂无
暂无

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

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