#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