【问题标题】:Why does my OAuth2 won't working with Spring Boot?为什么我的 OAuth2 不能与 Spring Boot 一起使用?
【发布时间】:2020-03-17 12:42:30
【问题描述】:

我正在尝试使用 OAuth2 为 Spring Boot 设置 Facebook 登录。

首先我有我的 spring 安全配置。我希望 www.localhost:8080/Intranet/** 中的每个页面都被未经 Facebook 授权的人屏蔽。

@Configuration
@EnableOAuth2Client
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
                .antMatcher("/Intranet/**")
                .authorizeRequests()
                .antMatchers("/", "/Intranet")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .logout().logoutSuccessUrl("/").permitAll();
    }

}

我在这里创建我的application.yml

  spring:
   application:
    name: spektrakonhemsida
  security:
    oauth2:
      client:
        registration:
          facebook:
            clientId: myID
            clientSecret: mySecret
            accessTokenUri: https://graph.facebook.com/oauth/access_token
            userAuthorizationUri: https://www.facebook.com/dialog/oauth
            tokenName: oauth_token
            authenticationScheme: query
            clientAuthenticationScheme: form
            resource:
              userInfoUri: https://graph.facebook.com/me
# Server configuration
server:
  port: 8080
  error:
    whitelabel:
       enabled: false

然后我有了 Spring Security 和 OAuth2 的依赖项:

        <dependency>


<groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth2-autoconfigure</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-oauth2-client</artifactId>
    </dependency>

    <!-- Prevent /error to crash -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

这是正在发生的事情:

  1. 当我访问 www.localhost:8080/Intranet
  2. 当我访问 www.localhost:8080/Intranet/Bokning

但我希望用户在进入 /Intranet/** 时自动导航到 Facebook 的登录页面

为什么没有发生这种情况?

【问题讨论】:

  • spring.security.oauth2.client 是 OAuth2ClientProperties 的有效前缀。你的是security.oauth2.client
  • @SergVasylchak 在哪里?
  • application.yml
  • @SergVasylchak 我也有展位 application.properties 文件。它适用于 MySQL。你认为那个文件会干扰 yml 文件吗?
  • 我从来没有同时拥有过application.propertiesapplication.yml,所以我不能确定。

标签: java spring spring-boot oauth-2.0 facebook-oauth


【解决方案1】:

现在找到了解决方案。需要这样做才能使其与 Facebook 一起使用。

安全性:

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {

        http
        .csrf().disable()
        .authorizeRequests()
        .antMatchers("/Intranet/Bokning").authenticated() // Block this 
        .antMatchers("/**", "/Intranet**").permitAll() // Allow this for all
        .anyRequest().authenticated()
        .and().logout().logoutSuccessUrl("/").permitAll()
        .and()
        .oauth2Login();
    }
}

还有 appllication.yml

spring:
  security:
    oauth2:
      client:
        registration:
           facebook:
              clientId: myID
              clientSecret: mySecret
              accessTokenUri: https://graph.facebook.com/oauth/access_token
              userAuthorizationUri: https://www.facebook.com/dialog/oauth
              tokenName: oauth_token
              authenticationScheme: query
              clientAuthenticationScheme: form
              resource:
                 userInfoUri: https://graph.facebook.com/me

server:
  port: 8080

和 pom.xml 文件:

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-oauth2-client</artifactId>
    </dependency>

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 2018-03-20
    • 2019-06-20
    • 2020-07-17
    • 2016-03-10
    • 2018-12-25
    • 2016-12-27
    • 2023-01-30
    • 2015-11-15
    相关资源
    最近更新 更多