我有一个简单的OAuth2应用程序。我首先创建了一个扩展WebSecurityConfigurerAdapter的SecurityConfig,并使用@ EnableOAuth2Sso进行了注释。我还在控制器中创建了一个API,以测试身份验证是否有效。主体被注入到控制器中,并给出正确的名称。
我现在正在尝试通过实现AuthoritiesExtractor并将其创建为bean来向主体添加一些权限。我也对PrincipalExtractor进行了同样的检查,以查看它是否正常工作。从浏览器发出任何请求时都不会调用它们。
编辑:实际上,这仅是通过OIDC进行的身份验证,因此我的客户端和资源位于同一应用程序上。
//这是我的安全配置类。
@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/**")
.authorizeRequests()
.antMatchers("/login**","/error**")
.permitAll()
.anyRequest()
.authenticated();
}
@Bean
public PrincipalExtractor principalExtractor() {
return map -> {
System.out.println("Principal extracted.");
User user = new User();
user.setUsername((String)map.get("username"));
return user;
};
}
@Bean
public AuthoritiesExtractor authoritiesExtractor() {
return new PrismAuthoritiesExtractor();
}
}
//这是我单独定义的AuthoritiesExtractor类,目的是检查这样做是否有效。
public class PrismAuthoritiesExtractor implements AuthoritiesExtractor {
@Override
public List<GrantedAuthority> extractAuthorities(Map<String, Object> map) {
return AuthorityUtils.commaSeparatedStringToAuthorityList("AUTH1,AUTH2");
}
}
答案 0 :(得分:1)
我为此苦了一段时间。之所以没有调用我的AuthoritiesExtractor
bean是因为较新版本的Spring不使用spring oauth2自动配置,而AuthoritiesExtractor
是oauth2自动配置方式来覆盖角色映射。
在当前版本的spring-security中,您可以使用delegation-based strategy with OAuth2UserService。文档中的样本应该足以帮助您入门。我正在使用Kotlin,因此我的示例可能对您不起作用。
还有GrantedAuthoritiesMapper,它应该更接近AuthoritiesExtractor
方法。