Страница аутентификации Google не перенаправляется после аутентификации с использованием OAuth2.0

Я устанавливаю весеннюю безопасность, используя OAuth2.0, используя приложение весенней загрузки. Страница аутентификации появляется с уже зарегистрированным пользователем Google, но после выбора одного из них снова загружается та же страница аутентификации.

HomeController.java

import java.security.Principal;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController
public class HomeController {


    @RequestMapping("/")
    public ModelAndView home() {
        System.out.println("inside home");
        ModelAndView model = new ModelAndView("home");
        return model;
    }

    @RequestMapping("/login")
    public ModelAndView loginPage() {
        System.out.println("inside login");
        ModelAndView model = new ModelAndView("login");
        return model;
    }

    @RequestMapping("user")
    @ResponseBody
    public Principal user(Principal principal) {
        System.out.println("inside userrrrrrrrr");
        return principal;
    }
}

AppSecurityConfig.java

@Configuration
@EnableWebSecurity  
@EnableOAuth2Sso
public class AppSecurityConfig extends WebSecurityConfigurerAdapter{

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

       // System.out.println(httpSecurity.);
        try {
            System.out.println("inside configure");
            httpSecurity
            .csrf().disable()
            .authorizeRequests().antMatchers("/login").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin().disable();
        }catch(Exception e) {
            System.err.println("exception caught:"+e);
        }   

    }
}

Это мой файл application.properties для конфигурации OAuth: я меняю идентификатор клиента и секретный код клиента.

security.oauth2.client.client-id = 434559791042-642qk4agcs32g1rajsssss62ilrd86s4.apps.googleusercontent.com
security.oauth2.client.client-secret = 1l4jqw7lBailpuVgWobvcxwo 
security.oauth2.client.access-token-uri = https://www.googleapis.com/oauth2/v3/token
security.oauth2.client.user-authorization-uri = https://accounts.google.com/o/oauth2/auth
security.oauth2.client.tokenName = oauth_token
security.oauth2.client.authenticationScheme = query
security.oauth2.client.clientAuthenticationScheme = form
security.oauth2.client.scope = profile email

security.oauth2.resource.user-info-uri = https://www.googleapis.com/userinfo/v2/me
security.oauth2.resource.preferTokenInfo = false

в моем приложении Google API я указал ниже перенаправления.

Авторизованные источники JavaScript: http://localhost:8080 Авторизованные URI перенаправления: http://localhost:8080/логин

Фрейм аутентификации Google идет с моей уже зарегистрированной учетной записью, но когда я выбираю его, он снова показывает тот же кадр аутентификации. После аутентификации он должен перенаправляться в мое родное приложение.


person user3718420    schedule 07.07.2019    source источник


Ответы (1)


Проверьте, что Spring отправляет redirect_uri в Google. Вы можете сделать это в своих браузерах, щелкнув правой кнопкой мыши и выбрав «Проверить», затем выберите вкладку «Сеть». Поэтому, когда вы выбираете вход в Google в своем веб-приложении, вы должны увидеть, что Spring отправляет ответ о перенаправлении в ваш браузер, это будет Google, и он будет включать параметр redirect_uri, на который Google отправит перенаправление. Убедитесь, что это правильно. И убедитесь, что он соответствует URI, который вы предоставили Google на странице API, так как Google заблокирует все, о чем он не знает.

person Wojciech Lesniak    schedule 08.07.2019
comment
это я вижу в запросе авторизации, когда пытаюсь войти в систему с учетной записью Google. redirect_uri=localhost:8080/login Авторизованное значение URI перенаправления на странице API Google: localhost:8080/login в моем контроллере создан API с сопоставлением запросов как /login. Так что в идеале звонок должен прийти сюда, но он не работает. - person user3718420; 12.07.2019
comment
Похоже, что в вашем redirect_uri выше отсутствует протокол: например, http или https, я считаю, что это требуется Google. - person Wojciech Lesniak; 12.07.2019
comment
URL-адрес перенаправления на самом деле был localhost:8080/login. Я забыл добавить это в разделе комментариев. Итак, мой URL-адрес перенаправления на самом деле accounts.google.com/o/oauth2/ и авторизованные URI перенаправления: localhost:8080/логин. Вы видите в этом что-то неправильное? - person user3718420; 12.07.2019
comment
у меня есть openid connect весной. когда я вызываю API, он не перенаправляется на аутентификацию, он просто дает исключение нулевого указателя. не могли бы вы помочь - person Jony Mittal; 07.07.2020