okta oauth2 Spring security все защищенные страницы перенаправляются на логин

#java #spring-boot #spring-security #oauth-2.0 #okta

#java #весенняя загрузка #spring-безопасность #oauth-2.0 #okta

Вопрос:

Я пытаюсь реализовать функцию единого входа okta (custom-provider) oauth2, используя spring security в моем приложении. Приложение успешно запрашивает вход пользователя в систему и авторизует пользователя. Ниже приведена моя конфигурация spring security. Проблема здесь в том, что, за исключением логина и нескольких других URL-адресов, которым присваивается PermitAll () , все защищенные страницы перенаправляются на ‘redirect-uri’ (который является URL-адресом входа), настроенным в приложении.yml приведен ниже. Я не могу понять, почему это происходит, я также не смог найти никакого решения, приведенного в документации okta. Я не вижу никаких сообщений об ошибках в журнале. Просто каждый раз, когда я получаю доступ к защищенной или защищенной странице, перенаправление происходит на http://localhost:8080/login это uri перенаправления, но мне нужно перенаправление, чтобы перейти на соответствующую страницу, выбранную пользователем. Я что-то здесь упускаю?

SecurityConfiguration.java

 @Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**").authorizeRequests()
            .antMatchers("/","/login**","/vendor/**", "https://fonts.googleapis.com/**", "/css/**",
                    "https://www.thymeleaf.org", "/js/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .oauth2Login();
    }
}
 

application.yml

 security:
    oauth2:
      client:
        registration:
          custom-client:
            client-id: 
            client-secret: 
            scope: ["openid", "profile", "email", "address", "phone", "groups"]
            provider: custom-provider
            state: xoxoxo
            redirect-uri: http://localhost:8080/login
            client-authentication-method: basic
            authorization-grant-type: authorization_code
            filter-order: 3
        provider:
          custom-provider:
            token-uri: https://did.oktapreview.com/oauth2/v1/token
            authorization-uri: https://did.oktapreview.com/oauth2/v1/authorize
            user-info-uri: https://did.oktapreview.com/oauth2/v1/authorize
            user-name-attribute: name
 

может кто-нибудь

Ответ №1:

Да, конечно, что-то не так.

перенаправление-uri: http://localhost:8080/login

redirect-uri должен быть ссылкой на конечную точку обратного вызова вашего клиента OAuth2.0

С точки зрения инфраструктуры Spring Security OAuth2.0, это должен быть следующий шаблон:

перенаправление-uri: «{baseUrl}/login/oauth2/code/{RegistrationID}»

где «baseUrl» — это ваш URL-адрес (http://localhost ) а «RegistrationID» — это регистрационное имя, в вашем случае это «пользовательский клиент».

На самом деле, вы можете указать в качестве параметра «redirect-uri» шаблон без определенного регистрационного идентификатора и baseUrl, так что ваша конфигурация должна выглядеть следующим образом:

 security:
    oauth2:
      client:
        registration:
          custom-client:
            client-id: 
            client-secret: 
            scope: ["openid", "profile", "email", "address", "phone", "groups"]
            provider: custom-provider
            state: xoxoxo
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
            client-authentication-method: basic
            authorization-grant-type: authorization_code
            filter-order: 3
        provider:
          custom-provider:
            token-uri: https://did.oktapreview.com/oauth2/v1/token
            authorization-uri: https://did.oktapreview.com/oauth2/v1/authorize
            user-info-uri: https://did.oktapreview.com/oauth2/v1/authorize
            user-name-attribute: name
 

Также обратите внимание на свои учетные данные, они должны быть заполнены.

Комментарии:

1. Я получаю код ошибки: invalid_request Описание: Параметр ‘redirect_uri’ должен быть URI перенаправления входа в систему в настройках клиентского приложения, если я ‘ localhost: 8080 / login / oauth2 /code / custom-client

2. @SGN uri перенаправления должен быть зарегистрирован в настройках клиентского приложения на стороне Okta

3. Администратор Okta в нашей организации сообщил, что uri перенаправления должен быть {baseUrl} /login, и это работает для других команд в организации. какой-нибудь обходной путь, если это так?

4. Ваше приложение является клиентом localhost:8080/login/oauth2/code/custom-client OAuth2 server (Okta), поэтому, с точки зрения протокола, uri перенаправления — это просто конечная точка обратного вызова для получения кода авторизации с сервера Oauth2.0. URI перенаправления это обязательный параметр запроса авторизации, Okta сравнит его с настроенным uri перенаправления на стороне Okta. URI перенаправления должен быть настроен на стороне Okta без заполнителей (это должен быть четкий URL) В вашем случае это должен быть localhost:8080/login/oauth2/code/custom-client