• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

webClient 사용시 설정

24.05.23 11:33 작성 조회수 110

0

안녕하세요

security 사용시 궁금한점이 있어 문의드립니다.

 

oauth2 client 의존성을 주가해서

securityConfig 설정까지 완료하였습니다.

 

그래서 oauth 사용하여 sns 로그인 까지 구현하였는데

 

webClient 사용해서 다른 api 와 통신시

/login 페이지로 빠져버리더라구요

 

아래는 해당 service 단이며

콘솔창에 service token 까지는 잘찍히는데

밑에부터는 /login 페이지로 빠지는것같습니다.

혹시 webClient 사용시 security 설정을 별도로 해줘야할까요?


@Service
class BusinessCardService(
    private val webClientConfig: WebClientConfig
) {

    suspend fun create() : String? {
        println("service create()")

        val requestAttributes = RequestContextHolder.getRequestAttributes() as ServletRequestAttributes
        val cookies = requestAttributes.request.cookies
        val tokenCookie = cookies?.find{ it.name == "Authorization" }
        val token = tokenCookie?.value

println("service token : ${token}")

        val businessCard =  webClientConfig.webClient().post()
            .uri("/v1/ocr")
            .headers { header ->
                header.setBearerAuth(token ?: "")
                header.set("Content-Type", "application/json")
            }
            .contentType(org.springframework.http.MediaType.APPLICATION_JSON)
            .retrieve()
            .awaitBodyOrNull<String>()


println("businessCard : "+ businessCard)

        return businessCard
    }
}

 

 

답변 2

·

답변을 작성해보세요.

0

webclient 로 다른 api 와 통신한다는 의미가 정확히 어떤 의미인가요?

/login 으로 이동한다는 의미는 인증을 받지 못했다는 뜻인데 다른 api 통신과 어떤 관계가 있는건지요?

webclient 통신과 스프링 시큐리티는 직접적인 관련성은 없습니다.

좀 더 자세한 설명이 필요할 것 같습니다.

안녕하세요 답변감사합니다.

 

제가 검색을 해보니

srping security 에서 (비동기 통신시)

EnableWebSecurity 가 아니라 Enablewebfluxsecurity

를 별도로 세팅을 해줘야하더라구요

 

그래서 webclient 비동기 통신시

EnableWebSecurity 로 작성된 spring security config 를 타지 못하는것 같습니다.

별도로 Enablewebfluxsecurity 로 다시 만들어줘야할것같습니다.

( EnableWebSecurity , Enablewebfluxsecurity 모두 세팅해주니 빌드시 에러가 나더군요 )

 

Enablewebfluxsecurity 를 사용하여 spring security config 를 코딩하려니

생각보다 관련 레퍼런스가 없어서

질문을 드렸습니다.

아 네

Enablewebfluxsecurity 은 webflux 기반 시큐리티 설정입니다

해당 강의에서는 다루지 않습니다

이건 webflux 기술이 먼저 선행되어야 가능한 영역입니다

향후 webflux 관련 강의를 다룰때 참고하도록 하겠습니다

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.25

안녕하세요, 인프런 AI 인턴입니다.

님의 문제는 Spring Security가 WebClient 사용 시 인증을 요구하기 때문에 발생합니다. WebClient를 사용할 때, Spring Security가 인증된 사용자만 접근할 수 있도록 제한하고 있으며, 토큰이 없거나 유효하지 않을 경우 로그인 페이지로 리디렉션 됩니다.

OAuth2로 SNS 로그인을 구현하셨다면, 로그인 과정에서 받은 토큰을 WebClient 요청에 포함시켜야 합니다. 이것은 님의 코드에서 이미 시도하고 계신 부분입니다.

다만, 문제가 발생하는 원인은 다음과 같은 부분일 수 있습니다:

  1. 토큰이 유효하지 않거나 잘못된 형식으로 전달되었을 수 있습니다. 토큰 값을 확인하시고 정확히 Bearer [토큰값] 형식으로 전달되는지 확인하세요.
  2. 토큰이 요청 헤더에 올바르게 설정되었는지 확인하세요. header.setBearerAuth(token ?: "") 부분에서 token 값이 null이 아닌지, 올바른 토큰 값이 설정되는지 로그를 통해 검증해보세요.
  3. Security 설정에서 해당 요청 경로(/v1/ocr)에 대한 접근 권한이 올바르게 설정되어 있는지 확인하세요. WebClient를 통한 요청도 Spring Security 규칙에 따라 처리되므로, 해당 경로에 대한 접근 권한 설정을 확인해야 합니다.

WebClient 사용 시에 별도의 Security 설정이 필요한 경우는 드물지만, Security 설정에서 예외를 두거나 접근 권한을 명시적으로 부여해야 하는 경우가 있을 수 있습니다.

참조하신 문서 내용 중 WebClient와 관련된 정보는 다음과 같습니다:

  • WebClient를 사용하여 REST API를 호출하는 방법에 대한 예제와 설명은 이곳에서 확인할 수 있습니다.

위의 조언들을 참고하여 문제를 해결해보시길 바랍니다. 추가적인 도움이 필요하시면 더 자세한 정보를 제공해주시기 바랍니다.

채널톡 아이콘