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

无法获取用户详细信息:。。springframework。安全oauth2。客户资源UserRedirectRequiredException

潘银龙
2023-03-14

当我在accessTokenUri中提供域名时,它不起作用并报告错误,但当我提供localhost时,它起作用。为什么?

授权服务器Config.java

@Configuration
@EnableAuthorizationServer
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

@Autowired
private AuthenticationManager authenticationManager;


@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {

    security.tokenKeyAccess("permitAll()")
            .checkTokenAccess("isAuthenticated()");
}


@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients
            .inMemory()
            .withClient("QWE123")
            .secret("abc")
            .authorizedGrantTypes("password")
            .scopes("user_info").accessTokenValiditySeconds(0)
            .autoApprove(true);
}


@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {

    endpoints.authenticationManager(authenticationManager);
}
}

@EnableResourceServer
@Configuration
public class ResourceServerConfig extends WebSecurityConfigurerAdapter {

@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}
@Autowired
private UserDetailsService customUserDetailsService;

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests()
            .antMatchers("/login").permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .formLogin()
            .permitAll();
}

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/user/**","/swagger-ui.html", "/v2/api-docs", "/swagger-resources/**");
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

    auth
            .userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());
}

@Bean
public BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

}

App.properties
security:
  basic:
    enabled: false
  oauth2:
    resource:
      filter-order: 3

ResourceServerConfig.java

@EnableOAuth2Sso
@Configuration
public class OauthConfig extends WebSecurityConfigurerAdapter{


    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .authorizeRequests()
                .antMatchers("/")
                .permitAll()
                .anyRequest()
                .authenticated();

    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/swagger-ui.html", "/v2/api-docs", "/swagger-resources/**");
    }
}

@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class Oauth2ResourceServerConfig extends GlobalMethodSecurityConfiguration {

    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
        return new OAuth2MethodSecurityExpressionHandler();
    }
}

App.properties

security:
  basic:
    enabled: false
  oauth2:
      client:
        clientId: QWE123
        clientSecret: abc
        accessTokenUri: https://example.net/auth/oauth/token
        userAuthorizationUri: https://example.net/auth/oauth/authorize
      resource:
        userInfoUri: https://example.net/auth/logged-in/principal
        filter-order: 3

错误:

2018-09-14 12:00:13.083信息25836---[main]o.s.j.e.a。AnnotationMBeanExporter:Located managed bean'environmentManager':作为MBean[org.springframework.cloud.context.environment:name=environmentManager,type=environmentManager]在JMX服务器上注册2018-09-14 12:00:13.095信息25836---[main]o.s.j.e.a。AnnotationMBeanExporter:Located managed bean'restartEndpoint':以MBean[org.springframework.cloud.context.restart:name=restartEndpoint,type=restartEndpoint]2018-09-14 12:00:13.106信息25836-[main]o.s.j.e.a在JMX服务器上注册。AnnotationMBeanExporter:Located managed bean'refreshScope':以MBean[org.springframework.cloud.context.scope.refresh:name=refreshScope,type=refreshScope]的身份在JMX服务器上注册2018-09-14 12:00:13.116信息25836---[main]o.s.j.e.a。AnnotationMBeanExporter:Located managed bean'configurationPropertiesRebinder':以MBean[org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=35d08e6c,type=configurationPropertiesRebinder]2018-09-14 12:00:13.123信息25836---[main]o.s.j.e.a。AnnotationMBeanExporter:Located managed bean'refreshEndpoint':作为MBean[org.springframework.cloud.endpoint:name=refreshEndpoint,type=refreshEndpoint]2018-09-14 12:00:13.424信息25836---[main]o.s.c.support在JMX服务器上注册。DefaultLifecycleProcessor:在第0阶段启动bean 2018-09-14 12:00:13.482信息25836---[main]o.s.c.支持。DefaultLifecycleProcessor:在阶段2147483647 2018-09-14 12:00:13.483信息25836---[main]d.s.w.p.DocumentationPluginsBootstrapper:上下文刷新2018-09-14 12:00:13.509信息25836---[main]d.s.w.p.DocumentationPluginsBootstrapper:找到1个自定义文档插件2018-09-14 12:00:13.530信息25836---[br>main]s.d.s.w.s。ApiListingReferenceScanner:扫描api列表参考2018-09-14 12:00:13.870信息25836---[
main]s.b.c.e.t。TomcatEmbeddedServletContainer:Tomcat已在端口上启动:8080(http)2018-09-14 12:00:13.882信息25836---[
main]c.h.dfsc。DfscServiceApplication:在44.8秒内启动DfscServiceApplication(JVM运行45.324)2018-09-14 12:01:52.271信息25836---[nio-8080-exec-1]o.a.c.c.c。[雄猫]。[本地主机]。[/api]:初始化Spring FrameworkServlet“DispatchersServlet”2018-09-14 12:01:52.271信息25836---[nio-8080-exec-1]o.s.web.servlet。DispatcherServlet:FrameworkServlet“DispatcherServlet”:初始化开始2018-09-14 12:01:52.292信息25836---[nio-8080-exec-1]o.s.web.servlet。DispatcherServlet:FrameworkServlet“DispatcherServlet”:初始化在21毫秒内完成2018-09-14 12:01:52.990警告25836---[nio-8080-exec-1]o.s.b.a.s。o、 r.UserInfoTokenServices:无法获取用户详细信息:类组织。springframework。安全oauth2。客户资源UserRedirectRequiredException,需要重定向才能获得用户批准

我在这方面找到了很多,但没有成功,你能帮我吗?

共有1个答案

俞俊逸
2023-03-14

我已经找到了解决办法。它是由于集群而发生的。有多个服务器实例对令牌进行身份验证和授权。当令牌生成请求发生时,它将令牌存储在一个实例上,但当授权请求到来时,它将命中另一个实例。其中未找到令牌并生成异常。在本地主机上,我只有一台服务器,因此工作正常。

 类似资料:
  • 我在网上搜索这个问题的解决方案,但没有找到任何有效的解决方案。我正在尝试设置基本的Spring Boot OAuth2授权提供程序和客户端。 我按照官方的Spring Boot指令,创建了Facebook和GitHub的单点登录。然后按照说明创建安全的Spring Boot Web应用程序。 以下是记录的内容: 信息2800---[nio-9999-exec-3]O.S.B.A.S.O.R.Use

  • 我正在一个项目,其中有要求的Gmail认证,也可以扩展。我在这里遵循这个教程,其中有关于Facebook和GitHub身份验证的示例。所以我尝试了Gmail,我得到了这个错误,我无法解决,并得到了新的异常时,试图解决。请帮助我,因为我相信这是代码受我添加的影响最小的地方。有了这么多的配置和代码,它只适用于github和fb,但不适用于Google。 socialapplication.java b

  • 是否可以使用OAuth 2访问令牌从ForgeRock的OpenAM获取用户详细信息(属于资源所有者的属性)? 我有一个受信任的SPA UI,可以使用资源所有者密码凭据授予类型从OpenAM获取访问令牌。然而,该访问令牌没有提供有关资源所有者的信息。类似地,endpoint没有提供任何信息。 OpenAM似乎有用于列出用户属性的endpoint,但是期望使用JWT作为请求的身份验证手段。 如何从访

  • 在当前版本中,您不仅可以查看AssetBundle文件的包含资源信息和依赖关系信息,同时还可以查看每种资源的详细使用信息。目前,UWA资源检测服务对于主流资源的支持如下: 纹理资源 对于纹理资源,UWA可以提供以下重要信息:分辨率、资源格式、内存占用、Mipmap功能是否开启 和 Read/Write是否开启。这些均为影响纹理文件尺寸和内存占用的重要因素。因此,我们将其在此进行详细展示,您可以对每

  • Amazon标识管理iam=Amazon标识管理客户端Builder.standard()。US_EAST_1)。 有人能告诉我怎么做吗? 我试图在下面的程序中列出一个用户的标签,但我得到了下面的错误:我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅维修文档。 公共类ListUserTags{ }