Spring boot에 oauth 연결하기 - (1)Oauth2의 개념

zooju·2022년 11월 23일
1

ROLE

  1. Resource Server
    • 예시: facebook, google
    • User가 회원가입하고 있는 상태
    • 우리가 제어하고자 하는 자원을 가지고 있는 서버

1-1. Authorization Server

  • 인증과 관련된 처리를 전담하는 서버
  • Resource Server로 Resource Server와 Authorization Server를 묶어 지칭하곤 함.
  1. Resource Owner
    • 자원의 소유자
    • Resource Server에 회원가입을 한 User
  2. Client
    • Resource Server에 저장된 Resource Owner의 정보를 가져오고자 하는 프로덕트
    • OAUTH를 사용하고자 하는 개발자. 나!

1. 등록

  • register: ClientResource를 사용하기 위해선 Resource Server에 승인을 사전에 받아놔야 함
  • 등록 방법은 서비스마다 다 다르지만 공통적인 것은
    • Client Id: 우리가 만들고 있는 application을 식별하는 식별자. 외부에 노출돼도 됨.
    • Client Secret: Client Id에 대한 비밀번호. 외부에 노출돼면 안 됨.
    • Authorized Redirect Urls: 리소스 서버가 권한을 부여하는 과정에서 우리에게 해당 url로 Authorized Code를 전달할 것임.

2. Resource Owner의 승인

  • Client ID, Client Secret, Redirect Url 을 Client와 Resource Server가 공유 하고 있음.
    • Client는 Redirect URL을 구현해야 함
  • Resource Owner가 Client에 접속하고, 활동 과정에서 Resource Server를 사용해야 하는 상황이 발생함. → Client는 이 때, Resource Owner에게 “google로 로그인하기” 등의 화면을 보여줌(사용자의 동의 필요) → Resource Owner가 로그인하기 버튼을 누르면 다음과 같은 주소로 연결됨.
    https://resource.server/?client_id=1&scope=B,C&redirect_url=https://client/callback
    → Resource Server가 Resource Owner의 로그인 여부를 확인하고, 로그인을 안했다면 로그인 화면을 보여준다. → 로그인에 성공하면 Resource Server는 url의 client id값과 같은 client가 있는지 확인하고, redirect url값과 같은지 다른지 확인한다. 다르면 여기서 작업을 끝내고 → 같다면 Resource Owner에게 scope에 해당하는 권한을 줄것이냐고 물어본다. → 허용한다고 하면 허용했다는 정보가 Resource Server로 전달되고 다음과 같이 정보가 Resource Server에 저장된다.
    user id: 1
    	scope: b,c (기능)

3. Resource Server의 승인

이제 Resource Server의 승인을 받아야 access token을 발급받을 수 있음!

이때 사용하는 임시 비밀번호가 authorization code!

access code 를 Resource Server가 Resource Owner에게 다음과 같이 전달해 줌

location: [https://client/callback?code=3](https://client/callback?code=3)

그러면 Resource Owner가 해당 location으로 이동하게 됨.

→그러면 code=3으로 client 는 authorization code 3을 얻게 됨

→ 그러면 client는 resource server에 직접 접속하여 access code 받게 됨 (아래 주소로)

https://resource.server/token?grant_type=authorization_code&code=3&redirect_uri=https://client/callback&client_id=1&client_secret=2

→ 이렇게 하면 3자 인증이 완료됨!

Resource Server는 authorization code를 보고 자기가 가진 access code와 일치하는지 확인(어떤 클라이언트에게 발급한거였더라?client id, client secret, redirect url 맞춰보기)

→ 4가지 정보가 완전히 일치하는지 확인하고, 일치하면 다음단계 진행!

4. Access Token 발급

oauth의 목적은 access token!

일단 client, resource server는 authorization code값을 지워야함. 그래야 인증을 다시하지 않음.

→ 이후 resource server는 access token을 발급함.

→ access token을 client에게 응답해줌.

→ client는 access token을 내부에 저장함

그리고 access token은 client가 access token을 가지고 접근하면 user id에 해당하는 사용자의 scope에 해당한 정보에 접근이 가능한 친구구나! 라고 생각!

profile
이것 저것 새로운 분야에 관심이 많은 서버 개발자

0개의 댓글