【问题标题】:OAuth2 Open ID client authentication followed by LDAP user details & authoritiesOAuth2 Open ID 客户端身份验证,后跟 LDAP 用户详细信息和权限
【发布时间】:2019-12-27 01:07:58
【问题描述】:

我们的应用当前设置了 OAuth OpenID 连接身份验证与外部(第三方)服务器。要求是使用从 LDAP(以及权限/角色)加载用户的用户详细信息服务来完成身份验证。所以authentication.getPrincipal() 应该返回我们使用的自定义 UserDetails 对象,该对象是通过使用从 Open ID 身份验证获得的用户名查询 LDAP 生成的。

我尝试了以下方法:

  • 关注Similar Issue,但似乎在答案中它正在设置服务器端并且它也不起作用
  • 尝试在 WebSecurityConfig 中添加自定义 UserDetailsS​​ervice
    @Configuration
    public class OAuth2Config extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.oauth2Login().and().userDetailsService(myCustomUserDetailsService());
        }
    }
    
    其中 myCustomUserDetailsS​​ervice() 处理对 LDAP 的调用并获取用户详细信息,包括权限。

我对 spring oauth2 框架不太熟悉,如果我错了,请纠正我:我猜我需要实现自己的用户信息端点来调用 LDAP,而不是提供的用户信息端点OpenID 服务给我?

【问题讨论】:

    标签: spring spring-security spring-security-oauth2


    【解决方案1】:

    您可以在安全过滤器链之后添加一个新过滤器。第二个过滤器可以从身份验证和用户查询中检索主体/名称。

    就像一个两步验证

    【讨论】:

      【解决方案2】:

      没有我希望的那么干净,但是我在 InteractiveAuthenticationSuccessEvent 上注册了一个应用程序侦听器,并在登录后手动更新了身份验证(类似帖子的答案https://stackoverflow.com/a/10747856/11204609

      如果有人有更好的建议?

      更新:身份提供者同意在他们的声明中包含 LDAP 信息,因此我可以通过令牌直接获取,而无需进行回调(目前仍在讨论中)。话虽如此,拥有一个身份验证成功回调应用程序侦听器是我解决问题的唯一方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        • 1970-01-01
        • 2017-08-04
        • 2020-09-24
        • 2016-09-05
        • 2011-05-30
        • 2013-07-20
        相关资源
        最近更新 更多