Java 如何在oauth2应用程序spring引导中正确设置用户角色
在我的应用程序中实现了oauth2之后,我正在与spring安全性作斗争。这是我的第一次经历,但我很高兴听到好听或愤怒的评论。这是改进的方法 问题: 在登录我的应用程序的过程中,我看到我从DefaultOidcUser类的google oidcuser对象中检索。此对象具有权限的集合,共有4项: 老实说,我不明白为什么我在我的系统中为这个用户获得了角色\用户,因为实际上它在我的系统中具有管理员角色(角色由我创建) 通常我在我的应用程序中有3个角色:用户、经理、管理员。但无法理解如何为特殊用户正确设置特定角色 因此,当我把smth放在下面时:Java 如何在oauth2应用程序spring引导中正确设置用户角色,java,spring-boot,spring-security,google-oauth,spring-security-oauth2,Java,Spring Boot,Spring Security,Google Oauth,Spring Security Oauth2,在我的应用程序中实现了oauth2之后,我正在与spring安全性作斗争。这是我的第一次经历,但我很高兴听到好听或愤怒的评论。这是改进的方法 问题: 在登录我的应用程序的过程中,我看到我从DefaultOidcUser类的google oidcuser对象中检索。此对象具有权限的集合,共有4项: 老实说,我不明白为什么我在我的系统中为这个用户获得了角色\用户,因为实际上它在我的系统中具有管理员角色(角色由我创建) 通常我在我的应用程序中有3个角色:用户、经理、管理员。但无法理解如何为特殊用户正确
.antMatchers("/api/**").hasRole(Role.ADMIN.name())
.antMatchers("/administration/**").hasRole(Role.ADMIN.name())
据我所知,我得到403个cos,每个用户都有一个角色用户
你能帮我设置每个用户的角色吗?除了我的数据库(不是谷歌默认的ROLSER_用户)?
我还读到了有关授权机构和授权机构地图绘制者的文章,但对我来说有点不清楚
我很乐意听取任何意见。任何有用的链接,以提高我对这方面的知识。Cos的主要目标:了解它是如何工作的
我的oauth2实现的其他类如下:
@Getter
@Setter
@RequiredArgsConstructor
public class CustomOidcUser implements OidcUser {
private final OidcUser oidcUser;
private String email;
private String firstName;
private String lastName;
@Override
public Map<String, Object> getClaims() {
return oidcUser.getClaims();
}
@Override
public OidcUserInfo getUserInfo() {
return oidcUser.getUserInfo();
}
@Override
public OidcIdToken getIdToken() {
return oidcUser.getIdToken();
}
@Override
public Map<String, Object> getAttributes() {
return oidcUser.getAttributes();
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return oidcUser.getAuthorities();
}
@Override
public String getName() {
return oidcUser.getName();
}
}
对于OIDC,默认情况下,Spring会将作用域和默认用户角色映射到OidcUser对象上授予的权限。 您只需将其返回到CustomOidcUser即可
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return oidcUser.getAuthorities();
}
@覆盖
公共收藏
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private final AuthProvider authProvider;
private final OnSuccessHandler onSuccessHandler;
private final CustomOidcUserService customOidcUserService;
private final UserService userService;
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setUseReferer(true);
successHandler.setDefaultTargetUrl("/success");
successHandler.setAlwaysUseDefaultTargetUrl(true);
http
.addFilterAfter(new UserHasManagerFilter(userService), BasicAuthenticationFilter.class)
.cors()
.and()
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/api/**").hasRole(Role.ADMIN.name())
.antMatchers("/administration/**").hasRole(Role.ADMIN.name())
.and()
.httpBasic()
.and()
.formLogin()
.loginPage("/unauthorized")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/success")
.failureUrl("/failed")
.successHandler(successHandler)
.usernameParameter("email")
.passwordParameter("password")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/logout_success")
.permitAll()
.and()
.oauth2Login()
.loginPage("/")
.userInfoEndpoint(userInfoEndpoint ->
userInfoEndpoint.oidcUserService(customOidcUserService)
.customUserType(CustomOidcUser.class, "google")
// .userAuthoritiesMapper(userAuthoritiesMapper())
)
.defaultSuccessUrl("/dashboard", true)
.successHandler(onSuccessHandler)
.failureHandler(authenticationFailureHandler())
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/**")
.permitAll();
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return oidcUser.getAuthorities();
}
Collection<GrantedAuthority> authorities ....
authorities.add(new SimpleGrantedAuthority("ROLE_...."));