본문 바로가기
부트캠프교육중/HTTP, 네트워크

OAuth

by 뭉지야 2023. 3. 9.
728x90

OAuth 2.0

- 인증을 중개해주는 메커니즘.

-보안된 리소스에 액세스하기위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜이다.

-이미 사용자 정보를 가지고있는 웹서비스(네이버, 카카오등)에서 사용자의 인증을 대신해주고, 접근 권한에 대한 토큰을 발급한후, 이를 이용해 내 서버에서 인증이 가능해진다.

-자주 사용하고 중요한 서비스들(네이버, 카카오)의 ID와 password만 기억해놓고 해당 서비스들을 통해서 외부 서비스로 소셜 로그인을 할수있다.

-보안상의 이점이 있다. 검증되지 않은 App에서 OAuth를 사용하여 로그인한다면 유저의 민감한 정보가 직접 App에 노출될 일이 없고 인증 권한에 대한 허가를 미리 유저에게 구해야 하기 때문에 더 안전하게 사용할수있다.

 


OAuth의 주체

1. Resource Owner

-OAuth 인증을 통해 소셜 로그인을 하고싶어하는 사용자.

-resource는 사용자의 이름, 전화번호 등의 정보를 뜻한다. 정보의 주인이 바로 사용자 이기 때문에 resource owner라고 한다.

 

2. Resource Server & Authorization Server

-사용자가 이미 사용중인 서비스(네이버, 카카오 등)의 서버 중 사용자의 정보를 저장하고 있는 서버를 특정해서 Resource Server라고 부른다.

-이미 사용중인 서비스의 서버 중 인증을 담당하는 서버를 특정해서 Authorization Server라고 부른다.

 

3. Application

-사용자가 소셜 로그인을 활용해 이용하고자하는(가입하고자하는) 새로운 서비스.

-환경에따라서 조금씩 다르게 부른다. 

-경우에 따라서 Application을 client와 server로 세분화해서 지칭하기도 한다.


OAuth 인증방식의 종류와 흐름

    - Grant Type: Authorization Server에서 Access Token을 받아오는 방식

1.  Implicit Grant Type

1. 사용자가 application에 접속.

2. application에서 authorization server로 인증 요청을 한다.

3. 유효한인증요청인지 확인하고 액세스 토큰을 발급한다.

4. authorization server에서 application으로 액세스 토큰을 전달한다.

5. application은 발급받은 액세스 토큰을 담아 resource server로 사용자의 정보를 요청한다.

6. 액세스토큰이 유효한지 확인한다.

7. 유효한 토큰이라면 application이 요청한 사용자의 정보를 전달한다.

8. 새로운 서비스를 시작할수있다!

 

#소셜 로그인에서 Implicit Grant Type은 잘 사용하지 않는다. 기존 서비스에 로그인만 되어있다면 새로운 서비스에 바로 액세스 토큰을 내어주기 때문에 보안성이 조금 떨어지기 때문이다. 그래서 보통 여기에 인증단계를 한단계 추가한 인증방식인 밑에 있는 Authoriztion Code Grant Type을 주로 사용한다.

 

2. Authoriztion Code Grant Type

 1. 사용자가 application에 접속한다.

2. application에서 authorization server로 인증요청을 보낸다.

3. authorization server는 유효한 인증요청인지 확인후 authorization code를 발급한다.

4. authorization server에서 application으로 authorization code를 전달한다.

5. application이 authorization code로 발급받은 authorization code를 전달한다.

6. authorization server는 유효한 authorization code인지 확인한후 액세스 토큰을 발급한다.

7. application으로 액세스 토큰을 전달한다.

8. application은 발급받은 액세스 토큰을 담아 resource server로 사용자의 정보를 요청한다.

9. resource server는 application에게서 전달받은 액세스 토큰이 유효한 토큰인지 확인한다.

10. 유효한 토큰이라면, application이 요청한 사용자의 정보를 전달한다.

 

# Implicit Grant Type과 비교해보면, authorization code를 사용한 인증단계가 추가로 있기 때문에 비교적 더 안전하다. 또한 원한다면 아래 그림과같이 토큰을 application의 client에 노출시키지 않고 server에서만 관리하도록 만들수도 있기 때문에 소셜 로그인을 구현하는 방식의 선택지가 늘어나게된다.

   

 3. Refresh Token Grant Type

-액세스 토큰이 만료되었을때를 대비해서, 액세스 토큰을 발급해줄때 리프레시토큰을 같이 발급해주기도 한다.

-리프레시 토큰을 사용해서 액세스 토큰을 받아오는 인증방식.

-authorization server로 리프레시 토큰을 보내주면 authorization server는 리프레시 토큰을 검증한 다음 액세스 토큰을 다시 발급해준다. application은 다시 발급받은 액세스 토큰을 사용해서 resource server에서 사용자의 정보를 받아오게 된다.

 


OAuth의 장점

1. 쉽고 안전하게 새로운 서비스를 이용할수있다.

-사용자는 아이디, 비밀번호 등의 정보를 일일이 입력하지 않아도 클릭 몇번만으로 손쉽게 가입할수있어 편리하다.

-정보를 해당 서비스에 직접 노출하는 것이 아니기 때문에 직접 가입하는 것보다 더 안전하다.

-application의 입장에서도 회원의 정보를 직접 가지고 있음으로 인해서 발생할수있는 회원정보 유출의 위험성에서 부담을 덜수있다.

2. 권한 영역을 설정할수있다.

-OAuth 인증을 허가한다고 해서 새로운 서비스가 사용중이던 서비스의 모든 정보에 접근이 가능한 것은 아니다. 사용자는 원하는 정보에만 접근을 허락할수있어 보다 더 안전하다.

-OAuth 설정 페이지에서는 application에서 필요한 정보를 선택할수있다. 사용자는 이중 원하는 정보만 선택적으로 제공할수있다.

  

728x90

'부트캠프교육중 > HTTP, 네트워크' 카테고리의 다른 글

GraphQL  (0) 2023.03.28
HTTPS  (0) 2023.03.12
쿠키/세션/토큰  (0) 2023.03.09
토큰 Token  (0) 2023.03.09
해싱 Hashing  (0) 2023.03.09