मैंने oauth2login को इस प्रकार सक्षम किया है।

  @Bean
  public SecurityWebFilterChain securityWebFilterChainCatchAll(ServerHttpSecurity http) {
    return http
        .csrf().disable()
        .authorizeExchange()
        .pathMatchers("/", "/static/**", "/favicon.ico")
        .permitAll()
        .anyExchange()
        .denyAll()
        .and()
        .oauth2Login()
        .and()
        .build();
  }

तब मेरे पास एपीआई इस तरह सुरक्षित है:

  @Bean
  public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http, final List<HttpSecurityConfig> configs) {
    return http
            .securityMatcher(ServerWebExchangeMatchers.pathMatchers("/api/**"))
            .authorizeExchange()
            .pathMatchers(HttpMethod.GET, "/api").permitAll()
            .anyExchange().authenticated()
            .and()
            .exceptionHandling()
            .authenticationEntryPoint(new HttpStatusServerEntryPoint(HttpStatus.UNAUTHORIZED))
            .and()
            .build();
  }

फिर मेरे application.yml में मैंने एक कस्टम ऑथ प्रदाता सेट किया है जैसे:

spring:
  security:
    oauth2:
      client:
        registration:
          cognito:
            clientId: ididid
            scope: openid,email,phone,profile
            clientName: MYClient
        provider:
          cognito:
            issuerUri: SOMEURI
            usernameAttribute: username

अब जब मैं अपना एप्लिकेशन बूट करता हूं तो सबकुछ अपेक्षित काम करता है। समस्याएँ तब शुरू होती हैं जब मैं अपने आवेदन के लिए परीक्षा लिखना चाहता हूँ।

मेरे परीक्षण के साथ एनोटेट किया गया है:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient

एक ऑटोवायर्ड WebTestClient के साथ और इसके साथ निष्पादित:

webTestClient.get()
.uri("/api/something")
.exchange()
.expectStatus()
.isOk()
.expectHeader()
.contentType(ContentType.APPLICATION_JSON.getMimeType())
.expectBodyList(Map.class)
.hasSize(0);

जब मैं परीक्षण चलाने का प्रयास करता हूं तो वे सभी विफल हो जाते हैं क्योंकि एप्लिकेशन संदर्भ निम्न त्रुटि संदेश के साथ नहीं बनाया जा सकता है।

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.reactive.WebFluxSecurityConfiguration': Unsatisfied dependency expressed through method 'setSecurityWebFilterChains' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityWebFilterChainCatchAll' defined in class path resource [***]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.web.server.SecurityWebFilterChain]: Factory method 'securityWebFilterChainCatchAll' threw exception; nested exception is java.lang.IllegalArgumentException: clientRegistrationRepository cannot be null

मुझे यह उदाहरण मिला है, जिसमें बहुत अच्छे उदाहरण लेकिन फिर भी मैं इसे काम नहीं कर सकता। मैं अपने परीक्षण को कैसे काम करना चाहता हूं मैंने शीर्षक के तहत निम्न पोस्ट में स्प्रिंग एमवीसी के लिए प्रलेखित किया

पूरी तरह से MockMvc का उपयोग करके प्रमाणीकरण को बायपास करें

मैं चाहता हूं कि मेरा परीक्षण वास्तव में कभी भी oauth2 प्रदाता को कॉल न करे। मैं केवल webTestClient.mutateWith(mockOAuth2Login().oauth2User(new CustomOidcUser()) के साथ एक oauth2user बनाना चाहता हूं जिसका उपयोग मेरे नियंत्रकों को कॉल करने के लिए किया जाता है।

वास्तविक oauth2 प्रदाता को कॉल न करने और अपवाद न मिलने पर मैं @SpringBootTest का उपयोग mockOAuth2Login().oauth2User के साथ कैसे कर सकता हूं?

0
user3139545 20 मार्च 2020, 20:04

1 उत्तर

सबसे बढ़िया उत्तर

यह https://github.com/spring-projects/ का एक उदाहरण हो सकता है स्प्रिंग-बूट/मुद्दों/19823 जिसे स्प्रिंग बूट की आगामी 2.3 रिलीज़ में संबोधित किया गया है - आप नवीनतम स्प्रिंग बूट माइलस्टोन को आज़माकर अपनी समस्या का समाधान देख सकते हैं।

इस बीच, आप स्वयं ReactiveClientRegistrationRepository के लिए एक @MockBean प्रदान कर सकते हैं:

@MockBean
ReactiveClientRegistrationRepository clientRegistrationRepository;

यदि इससे आपकी समस्या का समाधान नहीं होता है, तो कृपया GitHub पर एक न्यूनतम नमूना पोस्ट करने पर विचार करें।

3
jzheaux 20 मार्च 2020, 20:20