【问题标题】:Spring security 5: providing roles for OAuth2 authenticated usersSpring security 5:为 OAuth2 认证用户提供角色
【发布时间】:2020-12-31 15:27:08
【问题描述】:

我有现有的带有 Spring Security 5 和 OAuth2 客户端的 Spring Boot 应用程序,我已经成功配置了使用外部 OAuth2 提供程序(在我的例子中是 GitLab)的身份验证。

现在我在配置授权时遇到问题。我希望有一些方法可以让我编写代码来解析给定用户的角色(通​​过调用数据库或仅检查硬编码的用户名)。

我发现它可以通过使用PrincipalExtractorAuthoritiesExtractor 来实现,在一个很好的article 中进行了描述。但是,这些类在最近的 Spring Security 中不再存在。 与 Spring Security 5 兼容的替代方法是什么?

【问题讨论】:

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


    【解决方案1】:

    你要找的是GrantedAuthoritiesMapper

    在官方 Spring 安全文档中记录了 here

    这是一个代码示例:

    @EnableWebSecurity
    public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .oauth2Login(oauth2 -> oauth2
                    .userInfoEndpoint(userInfo -> userInfo
                        .userAuthoritiesMapper(this.userAuthoritiesMapper())
                        ...
                    )
                );
        }
    
        private GrantedAuthoritiesMapper userAuthoritiesMapper() {
            return (authorities) -> {
                Set<GrantedAuthority> mappedAuthorities = new HashSet<>();
    
                authorities.forEach(authority -> {
                    if (OidcUserAuthority.class.isInstance(authority)) {
                        OidcUserAuthority oidcUserAuthority = (OidcUserAuthority)authority;
    
                        OidcIdToken idToken = oidcUserAuthority.getIdToken();
                        OidcUserInfo userInfo = oidcUserAuthority.getUserInfo();
    
                        // Map the claims found in idToken and/or userInfo
                        // to one or more GrantedAuthority's and add it to mappedAuthorities
    
                    } else if (OAuth2UserAuthority.class.isInstance(authority)) {
                        OAuth2UserAuthority oauth2UserAuthority = (OAuth2UserAuthority)authority;
    
                        Map<String, Object> userAttributes = oauth2UserAuthority.getAttributes();
    
                        // Map the attributes found in userAttributes
                        // to one or more GrantedAuthority's and add it to mappedAuthorities
    
                    }
                });
    
                return mappedAuthorities;
            };
        }
    }
    

    spring 安全文档中还有几个例子和解释。

    【讨论】:

      猜你喜欢
      • 2014-04-20
      • 2015-03-11
      • 1970-01-01
      • 2013-01-18
      • 2020-06-07
      • 2016-11-09
      • 2011-07-21
      • 2015-12-17
      • 2016-10-03
      相关资源
      最近更新 更多