[CS] OAuth 2.0

말하는 감자·2025년 2월 6일

CS

목록 보기
23/33
post-thumbnail

인증(Authentication)과 인가(Authorization)

인증(Authentication)

  • 사용자가 누구인지(적합한지) 확인하는 과정
  • 로그인

인가(Authorization)

  • 인증된 사용자에게 권한을 허용
  • 게시물 수정, 관리자 권한 등

Https의 무상태성에 의한 인증 유지

JWT + 쿠키,세션

OAuth란


구글이나 애플 등의 외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인 할 수 있는 웹 어플리케이션들이 있는데,
웹 어플리케이션에서 구글 등이 제공하는 기능을 간편하게 사용할 수 있다는 장점이 있다.
예를 들어 Google로 로그인하면 API를 통해 연동된 계정의 Google Calendar 정보를 가져와 사용자에게 보여줄 수 있다.

이때 사용되는 프로토콜이 OAuth다

OAuth

인증 및 권한 부여를 위한 표준 프로콜롤로서, 사용자 정보에 대한 액세스를 제어하고 사용자가 다른 웹 애플리케이션이나 서비스에 로그인할 때 안전하게 권한을 부여하는데 사용

OAuth 구성 요소

  • Resource Owner: 웹 서비스를 이용하려는 유저, 자원(개인정보)을 소유하는 자, 사용자
    • Resource: 개인정보
  • Client: 애플리케이션 서버
  • Authorization Server: 권한을 부여해주는 서버
    • 사용자는 이 서버로 Id,Pw를 넘거 Authorization Code를 발급
    • Client는 이 서버로 Authorization Code를 넘겨 Token을 발급
  • Resource Server: 사용자의 개인정보를 가지고있는 애플리케이션(Google,Kakao 등) 회사 서버
  • Access Token: 자격 증명
  • Refresh Token

OAuth 동작 매커니즘

1~2. 로그인 요청

사용자(Resource Owner)가 로그인 요청
Client(애플리케이션 서버)는 OAuth 프로세스를 시작하기 위해 사용자의 브라우저를 Authorization Server(인증 서버)로 보낸다.

클라이언트는 이때 인증 URL에 response_type, client_id, redirect_uri, scope 등의 매개변수를 쿼리스트링으로 포함하여 보낸다.

  • response_type : 반드시 code로 값을 성정해야 합니다.
    인증이 성공할 경우 Client는 후술할 Authorization Code를 받습니다.
  • client_id : 웹 서비스를 Resource Server에 등록했을 때 발급받은 Client ID을 의미합니다.
  • redirect_uri : 웹 서비스를 Resource Server에 등록했을 때 등록한 redirect URI을 의미합니다.
  • scope : Client가 부여받은 리소스 접근 권한을 의미합니다.

3 ~ 4. 로그인 페이지 제공 및 ID/PW 입력

Client 로부터 Authorization URL로 이동된 Resource Owner는 제공된 로그인 페이지에서 ID/PW을 입력하여 인증

5 ~ 6. Authorization Code 발급 및 Redirect URI로 리다이렉트

Authorization URL에서 인증이 성공했다면, Authorization server는 기존에 설정한 Redirect URL에 Authorization Code 를 포함하여 사용자를 리다이렉션

  • Authorization code란 리소스 접근을 위한 Access Token을 획득하기 위해 사용하는 임시 코드이며, 수명은 매우 짧다.

7 ~ 8. Authorization Code와 Access Token 발급

Client는 다시 Authorization Server에 Authorization Code를 전달하고, Access Token을 발급받습니다.
Client는 자신이 발급받은 Resource Owner의 Access Token을 데이터베이스에 저장하고, 이후 Resource Server에서 Resource Owner의 리소스에 접근하기 위해 Access Token을 사용합니다

Access Token은 절대 유출되서는 안됩니다

9. 로그인 성공

위 과정을 모두 성공적으로 마치면 Client는 Resource Owner에게 로그인이 성공하였음을 알립니다.

이제 Access Token을 가지고 접근 가능한 Resource 에 접근할 수 있습니다

10 ~ 13. 서비스 요청 및 Access Token을 이용하여 리소스 접근 및 이용

이제 Access Token을 발급 받았기 때문에 정해진 Scope 내에서 다양한 리소스를 이용 할 수 있습니다

Scope

처음 로그인 요청시 scope를 정할 수 있다.

스코프란 Client가 사용 가능한 Resource의 접근 범위를 제한하는 것
예를 들어, 구글 플랫폼을 리소스 서버로 사용할 때, 사용자의 연락처를 받아오고 싶다면, scope에 연락처 scope 문자열을 포함하여 서버에 요청한다.

이러한 방식으로 발급된 액세서 토큰은 스코프 정보를 가지고 있어 권한을 제한한다.

profile
주니어개발자(?)

0개의 댓글