gpt4 book ai didi

Spring 安全 5 : providing roles for OAuth2 authenticated users

转载 作者:行者123 更新时间:2023-12-04 13:12:19 28 4
gpt4 key购买 nike

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

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

我发现它可以通过使用 PrincipalExtractorAuthoritiesExtractor 来实现,在 article 中有描述。 .但是,这些类在最近的 Spring Security 中不再存在。 实现该目标的替代方法是什么,与 Spring Security 5 兼容?

最佳答案

你要找的是GrantedAuthoritiesMapper

已记录 here在官方 spring 安全文档中

这是一个代码示例:

@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 security文档中还有几个例子和解释。

关于 Spring 安全 5 : providing roles for OAuth2 authenticated users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63875298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com