Naver 로그인 API Spring으로 구현하기

skyju·2023년 1월 13일

Spring

목록 보기
6/7

💚 Naver Login

시작 전 Setting ⚙️

  • Security setting : naver 의 경우 yml이나 properties에서 Security설정 필요
  • spring.security.oauth2.client.registration.naver.
  • client-id client-secret : API Application에서 발급받은 값을 설정
  • redirect-uri : API Application에서 설정한 uri 패턴을 작성
  • authorization-grant-type : authorization_code (code를 통한 인증) 고정
  • scope : 갖고올 필수 값
  • client-name : 우리 서비스 이름
  • provider : API이므로 고정이다. 자세한 변경사항은 검색!
# provide
spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize
spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token
spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me
spring.security.oauth2.client.provider.naver.user-name-attribute=response

  • 대략적인 흐름
    • 로그인 uri 생성 및 인증값 가져오기
      • https://nid.naver.com/oauth2.0/authorize?parameter 값으로 지정된 값을 붙여 URI을 만들면 네이버가 로그인 페이지를 생성해 준다.
        • response_type : code 로 고정
        • client_id : 발급 받은 값 입력
        • state : CORS를 방지하기 위한 특정 토큰 값(임의 값을 사용한다)
        • redirect_uri : application에 등록해놓은 redirect_uri 중하나, 로그인 인증이 완료되면 여기로 이동하도록 지정한다.
    • redirect_uri에서 code 를 가지고 access_token 발급받기
      • oauth에서 authorization이 성공적으로 된다면 code를 받아온다. code를 사용하면 access_token을 발급받을 수 있다.
      • https://nid.naver.com/oauth2.0/token 에 다음 parameter를 넘긴다.
        • grant_type : authorization_code 우리는 code 인증이므로 고정
        • client_id : 발급 받은 값 입력
        • client_secret : 발급 받은 값 입력
        • code : redirect_uri로 넘어온 @RequestParam 에 담겨있던 code
        • state : redirect_uri로 넘어온 @RequestParam 에 담겨있던 state
        • refresh_token : redirect_uri로 넘어온 @RequestParam 에 담겨있던 refresh_token

UriComponentsBuilder

  • Spring에서 URI를 손쉽게 생성할 수 있도록 도와주는 framework
  • scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
  • 아래와 같은 컴포넌트를 이용하여 손쉽게 URI를 구성할 수 있도록 도와준다.
    • Scheme
    • Host
    • Path
    • Fragment
  • 네아로 구성하면서 사용한 method 정리
    • fromUriString(String) : 해당 String의 URI로부터 구성
    • path(String) : 해당 String으로 path값 설정
    • build() : 변수설정 후 build
    • encode(void or Charset) : void일 경우 UTF-8 로 encoding
    • toUriString() : 최종적으로 URI String으로 만들기

WebClient

  • retrieve() : response body를 받아 디코딩하는 가장 간단한 메소드다.
  • 하나의 값을 리턴할 때는 bodyToMono 복수의 값을 리턴할 때는 bodyToFlux
  • block() : Web Client는 기본적으로 비동기로 작동한다. 하지만, 만약 동기로 작동하게 만들고 싶다면 해당 method를 이용한다.
profile
https://github.com/skyju

0개의 댓글