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

Spring OAuth@EnableResourceServer阻止来自OAuth服务器的登录页面

费秦迟
2023-03-14

localhost:9999/uaa/oauth/authorize的浏览器响应?response_type=code&client_id=acme&redirect_uri=http://example.com找到302,
但localhost:9999/uaa/login的响应为401未授权。

我可以在添加@enableResourceServer之前获得登录令牌。我正在使用Spring boot和扩展WebSecurityConfigurerAdapter来使用带有数据源的身份验证管理器。当我试图添加ResourceServerConfigurerAdapter时,它不会生成。允许登录页面的最简单方法是什么?

@SpringBootApplication
@RestController
@EnableResourceServer
public class OAuthSvcApplication extends WebMvcConfigurerAdapter {

private static final Logger log = LoggerFactory.getLogger(OAuthSvcApplication.class);

   @RequestMapping("/user")
   public Principal user(Principal user) {
    return user;
   }
   public static void main(String[] args) {
      SpringApplication.run(OAuthSvcApplication.class, args);
   }

}

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {


@Autowired
public void configureAuth(AuthenticationManagerBuilder auth,DataSource dataSource, Environment env)
        throws Exception {

    auth.jdbcAuthentication().dataSource(dataSource);
}


@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {


    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private DataSource dataSource;


    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints)
            throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }


    @Override
    public void configure(AuthorizationServerSecurityConfigurer security)
            throws Exception {
            security.checkTokenAccess("hasAuthority('USER')");
        }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients)
            throws Exception {
        clients.inMemory()
                .withClient("acme")
                .secret("acmesecret")
                .authorizedGrantTypes("authorization_code",
                        "refresh_token", "password").scopes("openid");
        }

    }
}

共有1个答案

丁宏浚
2023-03-14

SpringSecurityFilterChain应该始终在其他筛选器之前排序。如果您想为所有或某些endpoint添加自己的身份验证,最好的做法是添加顺序较低的WebSecurityConfigurerAdapter。按以下方式修改WebSecurityConfigurerAdapter子类允许ResourceServer使用jdbc身份验证管理程序:

@Configuration
@Order(-10)
protected static class LoginConfig extends WebSecurityConfigurerAdapter {


    @Autowired
    private AuthenticationManager authenticationManager;


    @Autowired
    private DataSource dataSource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .formLogin().loginPage("/login").permitAll()
        .and()
            .requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
        .and()
            .authorizeRequests().anyRequest().authenticated();
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.parentAuthenticationManager(authenticationManager).jdbcAuthentication().dataSource(dataSource);

    }

}
 类似资料:
  • 我正在尝试使用keycloak从现有的localhost(localhost:3000)登录页面进行登录。Keycloak在另一台主机上运行(http://kchost:38080)。我知道这不是推荐的登录方式,但我需要尽快适应现有的系统。 尝试卷曲: 错误是:CORS策略阻止了从来源“http://localhost:3000”访问位于“http://kchost:38080/auth/real

  • 此代码用于登录gmail 问题 我们有一个Web应用程序正在测试中,用户可以使用google(oAuth2)登录,但是gmail使用用户验证(重置密码或验证码或电话号码)捕获自动化脚本。 问题: 有没有办法避免gmail用户验证? (我不是要解决google验证挑战,在用户手动运行的普通浏览器中,此验证挑战不会被触发(大多数情况下),但在selenium中,有时会发生这种情况,并且我的测试失败。)

  • 我遇到过许多讨论类似问题的文章,但我找不到确切的答案。 我的公司希望开始使用Identity Server 3,但其中一个要求是能够对外部用户进行身份验证,而无需他们手动输入凭据。 这必须能够提供单一登录功能,因为我们有3个不同的系统,用户只需登录一次。 本质上,外部用户有自己的CRM。 CRM保存我们软件的用户名和密码 至关重要的是,我们不能为我们的合作伙伴改变这一进程。 我可以实现一个自定义服

  • 我正在遵循一个教程来让kie-drools-workbench和kie-server工作:https://www.intertech.com/blog/simple-setup-of-drools-kie-workbench-and-kie-server-in-one-wildfly-instance/ 安装了wildfly,并下载了kie-server-6.4.0.final-ee7和kie-d

  • 使用以下命令登录 ftp服务器: lftp ftp://用户名[:密码]@服务器地址[:端口] #标准方式,推荐 lftp 用户名[:密码]@服务器地址[:端口] lftp 服务器地址 [-p 端口] -u 用户名[,密码] lftp 服务器地址[:端口] -u 用户名[,密码] 如果不指定端口,默认 21 如果不在命令中使用明文输入密码,连接时会询问密码(推荐) 可以使用“书签”收藏服务器

  • 截至今天,用户无法在新的配置文件中使用selenium登录到Google帐户。我发现,谷歌正在阻止这个过程(拒绝?)甚至尝试stackauth。(在升级到v90后经历过这种情况)。 这是我之前发布的使用OAuth登录Google的答案,直到最近才生效 简而言之,您将通过stackauth直接登录。 我可以绕过限制的唯一方法是禁用Secure-App-Access或添加以下给定参数。(我不喜欢这样,