배움 기록_실무 ✏️

구글 OAuth2 인증 방식

j_estory 2022. 3. 29. 22:48
  • 이처럼 웹 사이트 계정 인증에서 타 서비스의 계정을 사용하는 인증 방식을 OAuth 2.0 인증 방식이라고 한다.
{
 "sub": "110248495921238986420",
 "name": "Aaron Parecki",
 "given_name": "Aaron",
 "family_name": "Parecki",
 "picture": "https://lh4.googleusercontent.com/-kw-iMgD
   _j34/AAAAAAAAAAI/AAAAAAAAAAc/P1YY91tzesU/photo.jpg",
 "email": "aaron.parecki@okta.com",
 "email_verified": true,
 "locale": "en",
 "hd": "okta.com"
}
  1.  서비스 등록
  •  특정 서비스의 OAuth 인증을 사용하기 위해서는, 해당 서비스에 내가 OAuth 인증을 사용 할 수 있는 어플리케이션을 등록해야 한다.
    • 예를 들어, 내가 URL을 가지는 웹 서비스를 하나 만들었는데, 내 웹 서비스에서 '구글 로그인' 방식의 OAuth 인증을 추가로 사용할 수 있도록 지원하고 싶다고 가정
    • 구글 API 콘솔에 접속하여 새로운 프로젝트를 생성해주는 것이 첫번째!
    • 프로젝트의 메인 콘솔 페이지에서 사용자 인증 정보를 만들어야 한다.
      • OAuth 클라이언트 ID 만들기
        • OAuth를 사용할 서비스의 유형, 이름, redirectURL
        • 클라이언트 ID, 클라이언트 비밀번호 발급 -> Google OAuth 인증 사용

   2.  OAuth 2.0 동작 방식

  • 인증의 과정을 '타 서비스에게 위임' 하는 인증 방식
    • 위임을 한다는 뜻은 웹 사이트 내, '구글 로그인' 인증을 넣었다고 해서 사용자가 구글 웹 사이트에 직접 로그인하는 것이 아니다라는 뜻
    • 내 웹 사이트에 접속한 사용자의 정보는 여전히 내 웹 사이트에서 관리해야 한다.
  • 구글이 해주는 일은 웹 사이트 사용자가 '구글 로그인' 기능을 통해 구글에게 전송한 계정 정보가 유효한지 확인 후, 유저 정보 중 일부를 내 웹 사이트에서 제공해주는 '인증' 과정만을 처리해주는 것이다.
  • 구글 인증 페이지
  • 웹 사이트에 접속해 로그인 페이지에서 구글 로그인 버튼을 누르면 아래와 같이 Google 인증 페이지로 이동

 

로그인 - Google 계정

 

accounts.google.com

  • 단순히 이 링크를 들어가면 400 오류 페이지
    • 필수적으로 제공해줘야 하는 파라미터를 전달해주지 않음 
    • 즉, OAuth를 인증을 사용하고 싶다는 것이지만 다짜고짜 인증 서버 페이지 주소를 입력하면 어떤 웹 사이트에서 OAuth 인증을 요청하는지를 알 수 없기 때문에 오류 발생
  • 누가 요청 했는지 서버에 알려주기 위해서 OAuth 클라이언트 생성 시, 받았던 클라이언트 ID이다.
    • 웹 서비스를 구글에 프로젝트로 등록 했고, 등록 시 웹 사이트 URL 정보를 제공했기 때문에 구글에서는 클라이언트 ID를 주면 구글에서 어떤 웹 사이트에서 인증을 요청하는지 자체적으로 식별 가능
  • 클라이언트 ID 외에도 많은 추가 정보를 제공해줘야 한다 : Redirect URL
    • 구글 인증 서버에 올바른 구글 계정 정보를 입력하게 되면 유효 하다면 해당 유저의 정보를 우리의 웹 서비스로 전송
      • 웹 사이트로 계정 정보를 전송 해야 현재 로그인 한 유저 정보가 어떤 유저인지 식별 가능 
      • 웹 서비스에서 자체적으로 유저 정보를 관리 가능 (OAuth 인증 방식에서 google은 단지 '인증' 만을 다루고, 실제 유저 정보는 웹 사이트에서 관리)
    • 이를 위해 사용해야 하는 것이 RedirectURL 이다.

 

   3. 액세스 토큰

  •  바로 유저 정보를 전달해주면 보안 상 취약 하므로 하나의 단계를 더 추가하는데, 이 단계를 구현하기 위해 사용하는 것이 토큰이다.
  • 사용자가 구글 인증에 성공하면, 구글에서는 우리의 RedirectURL로 리다이렉트 하는데 이때, 사용자 정보를 보내주기 전에 URL에 code라는 파라미터 변수를 추가해준다.
  •  이 code를 통해 구글 계정 정보에 접근 할 수 있는 토큰을 얻는다.
  • 클라이언트 ID, 비밀번호 도 추가적으로 제공해줘야 하며 RedirectUrl도 함께 제공해줘야 한다.
  • 토큰이 발급 되면 해당 토큰을 사용하여 https://www.googleapis.com/oauth2/v3/userinfo 라는 URL에 우리의 액세스 토큰 정보를 포함하여 GET 요청을 보내면, 아래와 같은 유저 정보를 JSON 형태로 얻을 수 있다.
{
 "sub": "110248495921238986420",
 "name": "Aaron Parecki",
 "given_name": "Aaron",
 "family_name": "Parecki",
 "picture": "https://lh4.googleusercontent.com/-kw-iMgD
   _j34/AAAAAAAAAAI/AAAAAAAAAAc/P1YY91tzesU/photo.jpg",
 "email": "aaron.parecki@okta.com",
 "email_verified": true,
 "locale": "en",
 "hd": "okta.com"
}

출처 : https://velog.io/@piecemaker/OAuth2-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

'배움 기록_실무 ✏️' 카테고리의 다른 글

static의 모든 것  (0) 2022.10.10
AWS Database Migration Workshop  (1) 2022.05.25
OAuth 동작 방식  (1) 2022.03.29
쿠팡 파트너스 API 연동  (2) 2022.02.28
Spring batch 개발  (4) 2022.02.10