OAuth2 Login

김창모·2023년 6월 16일
0

SpringBoot

목록 보기
18/19

OAuth란?

OAuth 란 Open Authorization 의 약자로 인터넷 사용자가 비밀번호를 제공하지 않고도 서드파티
애플리케이션에서 다른 웹서비스에 대한 제한적인 접근 권한을 부여할수 있는 개방형 표준 인증 프로토콜 이다.
OAuth 는 사용자의 인증 정보를 안전하게 보호하면서 클라이언트가 제한된 범위에서 사용자 계정에 접근할수 있게 해준다.

OAuth 의 구성요소

Resource Owner(사용자)

자신의 데이터에 접근하려는 애플리케이션에 대한 권한을 부여하는 웹서비스의 사용자이다.

Client

사용자의 데이터에 접근하기 위해 인증 및 권한 부여를 요청하는 애플리케이션 또는 서비스이다.

Service Provider

사용자의 데이터를 보유하고 있는 웹서비스이다. 사용자의 데이터에 접근을 허용하고 OAuth 인증 프로세스를 처리한다.

OAuth 프로세스

  1. 클라이언트는 사용자에게 인증을 요청하기 위해 서비스 제공자에게 리다이렉션 URL 을 생성한다.
  2. 사용자는 클라이언트에서 제공되는 리다이렉션 URL을 통해 서비스 제공자에게 인증 요청을 전달한다.
  3. 서비스 제공자는 사용자에게 로그인 화면을 제공하고 사용자는 자신의 계정 정보를 입력하여 인증한다.
  4. 사용자 인증에 성공하면 서비스 제공자는 클라이언트에게 인증 코드 또는 엑세스 토큰을 제공한다.
  5. 클라이언트는 제공받은 인증 코드 또는 엑세스 토큰을 사용하여 서비스 제공자에게 사용자의 데이터에 접근할수 있는 권한을 요청한다.
  6. 서비스 제공자는 클라이언트에게 사용자의 데이터에 대한 접근 권한을 부여하고 클라이언트는 해당 데이터를 사용할수 있다.

EX)

  • Mong.com (클라이언트)
  • 구글(서비스 제공자)
  • 나(사용자)
    나 는 Mong.com 서비스를 이용하려고 한다. 이때 Mong.com 에서 제공하는 구글 로그인 화면에 아이디와 비밀번호를 입력하면 Mong.com 은 내 구글 정보에 접근할수 있는 권한이 생긴다.

OAuth2 Login 구현

의존성 추가

  • implementation('org.springframework.boot:spring-boot-starter-oauth2-client'

implementation('org.springframework.boot:spring-boot-starter-oauth2-client'

OAuth2 클라이언트를 사용하기 위한 의존성을 추가해준다.

구글 설정

구글 OAuth Login 설정

위 링크로 접속한다.

프로젝트 생성하기

  1. 이미지속 표시한 부분을 클릭.
  1. 새 프로젝트
  1. 프로젝트 이름 입력후 만들기

  2. OAuth 동의 화면 클릭후 프로젝트 선택 , User Type = 외부 , 만들기

  1. 필수 입력 사항 입력후 저장 후 계속

  1. 사용자 인증 정보 선택 후 사용자 인증 정보 만들기(Oauth 클라이언트 ID)

  1. 애플리케이션 유형 : 웹 애플리케이션 , 승인된 리디렉션 URI 입력.

Spring boot 공식 문서 를 보면 redirect URI 로 아래 주소를 입력하라고 한다.

  1. 생성된 클라이언트 ID 와 클라이언트 보안 비밀번호 를 기억해두어야한다.

application.yml 세팅

application.yal 세팅 전에 프로젝트의 .gitignore 파일에 springboot gitignore 의 내용들을 추가하여 git 에 포함시키지 않을 내용에 대한 설정을 해주었다.

  • *.yml
spring:
	security:
    oauth2:
      client:
        registration:
          google:
            client-id: 
            client-secret: 
            scope:
              - email
              - profile

SpringSecurity 세팅

http 에 아래 내용을 추가해준다.

                .and()
                .oauth2Login()
                .userInfoEndpoint()
                .userService(customOAuth2UserService)
                .and()
                .loginPage("/login")
                .defaultSuccessUrl("/")
                .failureUrl("/login?error")

0개의 댓글