首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring Cloud Gateway中获取Keycloak领域和用户属性

如何在Spring Cloud Gateway中获取Keycloak领域和用户属性
EN

Stack Overflow用户
提问于 2020-05-22 18:48:22
回答 1查看 716关注 0票数 0

在Spring Boot with MVC中,可以通过控制器方法中的注入Principal获取有关Keycloak用户领域和定义的属性的信息,该方法的类型为KeycloakAuthenticationToken,它提供了这些信息。

但在具有依赖关系的Spring Cloud Gateway中

代码语言:javascript
复制
    implementation 'org.springframework.cloud:spring-cloud-security'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

和安全性,通过

代码语言:javascript
复制
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http,
            ReactiveClientRegistrationRepository clientRegistrationRepository) {
        // Authenticate through configured OpenID Provider
        http.oauth2Login();
        ...
}

security works和我设法通过筛选器检索主体

代码语言:javascript
复制
.filter((exchange, chain) -> {

                            return exchange.getPrincipal().flatMap(p -> {
                                System.out.println("Pricnipal class: " + p.getClass());
                                OAuth2AuthenticationToken token = (OAuth2AuthenticationToken) p;
                                System.out.println("Token: " + token.getAuthorizedClientRegistrationId() + "|"
                                        + token.getPrincipal().getAttributes() + "|" + token.getDetails() + "|"+ token.getPrincipal().getClass());
                                System.out.println("Exchange Attr: " + exchange.getAttributes());
                                OidcUser oicdUser = (OidcUser)token.getPrincipal();
                                System.out.println("OicdUser: "+oicdUser.getClaims()+ "|" + oicdUser.getIdToken().getClaims()+"|"+oicdUser.getAttributes());
                                Authentication aut = (Authentication) p;
                                ServerHttpRequest request = exchange.getRequest().mutate().header("username1", p.getName())
                                        .header("roles1", aut.getAuthorities().toString()).build();
                                return chain.filter(exchange.mutate().request(request).build());
                            });

                        })

但是它的类型是OAuth2AuthenticationToken。其中有关于认证用户的基本信息,但没有通过Keycloak管理控制台定义的Keycloak领域或用户属性数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-22 22:37:04

实际上,它是有效的。发布的代码没有任何问题。我没有正确设置Keycloak映射器,这是向token添加属性所需的。完成上述配置后,上述方法就足以从令牌中检索用户属性。它们将位于OAuth2AuthenticationToken tokentoken.getPrincipal().getAttributes()属性中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61953278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档