Я пытаюсь заставить Azure SSO работать с приложением Vaadin. Я читал документацию, но все еще делаю что-то не так, поскольку получаю страницу «Отказано в доступе» с сообщением.
Не удалось перейти к '' Причина: доступ запрещен из-за аннотаций в представлении.
Доступные маршруты:
- ... Все мои страницы одинаковы.
Я настроил свой application.properties с соответствующими данными:
spring.security.oauth2.client.provider.azure.issuer-uri=https://login.microsoftonline.com/[TENANT ID]/v2.0
spring.security.oauth2.client.registration.[MY APP].provider=azure
spring.security.oauth2.client.registration.[MY APP].client-id=[CLIENT ID]
spring.security.oauth2.client.registration.[MY APP].client-secret=4[CLIENT SECRET]
spring.security.oauth2.client.registration.[MY APP].scope=profile,openid,email
Я зашел на свою страницу единого входа и вошел в систему, а затем, когда происходит перенаправление, я получаю сообщение об ошибке.
У меня также есть зависимость в моем файле build.gradle:
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
Я определил конфигурацию безопасности следующим образом:
@EnableWebSecurity
@Configuration
public class SecurityConfig extends VaadinWebSecurity {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(auth ->
auth.requestMatchers(
AntPathRequestMatcher.antMatcher("/**")).permitAll());
super.configure(http);
}
}
И в верхней части моих представлений у меня есть, например, маршрут по умолчанию:
@Route(value = "", layout = MainLayout.class)
@PageTitle("Home")
@PermitAll
Есть идеи, чего мне здесь не хватает?





у меня была похожая проблема потому что в документации по безопасности загрузки Spring нелегко ориентироваться.
Попробуйте решение, которое сработало для меня:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(authorize -> {
authorize
.requestMatchers(new AntPathRequestMatcher("/**"))
.permitAll();
});
http.csrf(csrf ->
csrf.ignoringRequestMatchers(
new AntPathRequestMatcher("/oauth2/authorization/**")));
super.configure(http);
setLoginView(http, LoginView.class);
}
В документации из 5.8.8 показано, что такое замена метода hasIpAddress (они просто сбивчиво дали IpAddressMatcher и имя hasIpAddress), поэтому следуйте этой инструкции.
Создайте authorizeHttpRequests, как показано в документации, а также обратите внимание на примечание под этим кодом, в котором по сути говорится, что это плохая идея.
Итак, все, что мне было нужно, это:
@EnableWebSecurity
@Configuration
public class SecurityConfig extends VaadinWebSecurity {
protected void configure(HttpSecurity http) throws Exception {
http.oauth2Login(Customizer.withDefaults());
super.configure(http);
}
}