当前位置: 首页 > 知识库问答 >
问题:

Spring Boot资源服务器主体名称

苏晓博
2023-03-14

我有一个keydeport服务器在运行。以及作为资源服务器的Spring Boot应用程序。我可以验证并获取令牌,spring boot应用程序将接受令牌。但是当我想从校长那里得到用户名时,我会得到一个UUID,而不是我的电子邮件或用户名。我还为我的KeyClope添加了一个映射器,将preferred_用户名映射到用户名。它正在工作。

JWT信息

  ...
  "scope": "openid profile email",
  "email_verified": true,
  "username": "test@test.com",
  "DOB": "12345",
  "name": "test test",
  "preferred_username": "test@test.com",
  "given_name": "test",
  "family_name": "test",
  "email": "test@test.com"
}

我的spring应用程序属性:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://localhost:8080/auth/realms/test

共有2个答案

聂华翰
2023-03-14

Spring Security将JWT令牌作为主体保存给SecurityContextHolder。例如,以下代码将返回您正在查找的用户名。

...
import org.springframework.security.oauth2.jwt.Jwt;
...
@GetMapping(value = "current-user", produces = "application/json")
    ResponseEntity<String> getLoggedInUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        Jwt principal = (Jwt) authentication.getPrincipal(); 
        String currentUserName = principal.getClaimAsString("username");
        return new ResponseEntity<String>(currentUserName, HttpStatus.OK);
    }
子车俊材
2023-03-14
@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class JWTSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
    
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    @Bean
    public KeycloakConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }

    /**
     * Defines the session authentication strategy.
     */
    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
          .authorizeRequests(authz -> authz
            .anyRequest().permitAll().permitAll())
          .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt);
    }
}
 类似资料:
  • 我有一个单独的身份验证服务器和一个资源服务器——都是Spring Boot应用程序。我使用OAuth2和JWT令牌进行身份验证和授权。 我可以通过访问身份验证服务器获得令牌: 并通过将令牌附加到请求标头来从资源服务器(在不同的服务器上运行)获取资源时使用它。 但我不清楚的是,确定哪个用户登录了资源服务器。 在auth服务器中,我可以这样做: 此终结点将根据所使用的令牌获取当前用户。如果我尝试在资源

  • 问题内容: 我们已经设置了OAuth2授权服务器,因此我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security- oauth/wiki/oAuth2#resource-server-configuration 应该

  • 我们已经设置了一个OAuth2授权服务器,所以我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security-oauth/wiki/oauth2#资源-服务器-配置 应该指向令牌处理bean。然而,令牌处理似乎是由服务器

  • 我有以下场景:一个客户端应用程序试图访问API网关后面的APIendpoint。我想验证(使用id和秘密)应用程序,如果它是应用程序A允许它访问endpoint/信用,如果它是应用程序B允许它访问endpoint/借方。 我假设API网关应该验证一个调用是否应该被拒绝。你能告诉我我的工作流应该是什么样子,我应该使用什么Keycloak功能吗?

  • 试图让UserDetailsService为我设置的oauth2资源服务器工作。我能够成功地对jwt进行身份验证,但是我所做的一切似乎都无法让它调用loadUserByUsername方法。它最初使用的是SAML,并且可以工作,但现在我切换到了Oauth2,我无法让它工作。 我在google上发现,我只需要用@service将类注册为bean,spring就会把它捡起来,但它不起作用。我还尝试通过

  • 资源类型配置 下面讲解如何根据所要访问资源的IP地址和端口,在SSL VPN设备上配置资源。 1. 确定要访问的资源IP地址和端口号,例如,本例要连接的服务器IP地址是200.200.73.65,端口号为4420; 2. 输入用户名和密码登陆SSL VPL控制台,按如图4.1.1所示操作新建资源:SSL VPN设置 > 资源管理 > 新建 > L3VPN。 3. 输入资源信息,包括资源名字(由用户