궁금한게 많은 개발자 노트

인증, 인가와 OAuth란 본문

Back End

인증, 인가와 OAuth란

궁금한게 많은 개발자 2022. 4. 18. 14:21

인가(Authorization)

인가란?

  • 인가는 유저가 해당 서비스를 사용할 수 있는 권한이 있는지 확인하는 절차이다.
  • 예를 들어, 해당 유저는 고객 정보를 볼 수 있는 있지만 수정 할 수는 없다.
  • 로그인하는 것이랑 어떤 서비스를 사용할 수 있는 것은 별개의 문제이다. 예를 들어 넷플릭스에 로그인을 했어도, 결제를 하지 않은 유저는 영상 재생을 할 수 있는 권한이 없다.
  • 보통 로그인 인증, 인가? 어떻게 구분?
  • (HTTP는 이전 요청과 응답을 기억 못 하는 stateless한 특성을 가지기 때문에, 로그인을 할 때 토큰을 생성한다. 이후 어떤 요청이 있을 때 토큰을 통해 해당 유저 정보을 얻고, 권한을 확인할 수 있다.)

어떤 과정으로 이루어질까?

  1. 인증 절차를 통해 access token을 생성한다. access token에는 user id 등 유저 정보를 확인할 수 있는 정보가 들어가 있어야 한다.
  2. 유저가 request를 보낼때 access token을 첨부해서 보낸다.
  3. 서버에서는 유저가 보낸 access token을 복호화 한다.
  4. 복호화된 데이터를 통해 user id를 얻는다.
  5. user id를 사용해서 DB에서 해당 유저의 권한(permission)을 확인하다.
  6. 유저가 충분한 권한을 가지고 있으면 해당 요청을 처리한다.
  7. 유저가 권한을 가지고 있지 않으면 Unauthorized Response(401) 혹은 다른 에러 코드를 보낸다.

 

OAuth

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.

OAuth는 왜 사용해야 할까?

OAuth가 나오기 전에는 모든 사이트를 이용할때마다 개인정보를 입력하여 회원가입을 해야했다. 그렇지만 보안적인 문제로 인하여 특정 사이트에 대한 신뢰성이 문제가 되었다.

이러한 문제를 해결하기 위해서 개인정보를 입력하지 않고 회원의 정보를 가져올 방법이 필요했고, 여러가지 방법이 나왔는데 구글의 AuthSub, AOL의 OpenAuth, 야후의 BBAuth 등이 있었다.

OAuth는 위의 제각각인 방법을 표준화 시킨 인증방식이다.

 

 

Oauth의 인증과정

로그인을 하고 서비스를 사용하려는 사람을 사용자, 타사의 Oauth API를 이용하려는 서비스 제공자를 클라이언트, Oauth를 제공하는 곳을 서버라고 하자.
(아래는 구글 Oauth 인증과정을 간략화 한 것이며, 전체적인 흐름은 같지만 서비스 별로 차이가 있을 수 있다.)

  1. 사용자가 클라이언트 서비스에 접속한다.
  2. 사용자가 로그인을 위해 서버의 Oauth서비스를 선택한다.
  3. 사용자는 서버의 Oauth 페이지로 이동해 인증 과정을 거친다.
  4. 인증 과정이 끝나면 클라이언트가 지정한 URL로 서버에서 파라미터에 인증 코드를 붙여서 리다이렉트 한다.
  5. 리다이렉트된 URL에 붙어 온 파라미터를 읽고 클라이언트는 여기서 온 정보와 클라이언트 id와 비밀번호를 붙여서 서버에 액세스 토큰을 요청한다.
  6. 액세스 토큰을 제대로 받았다면 이 액세스 토큰으로 클라이언트는 사용자의 데이터를 서버에게 요청할 수 있다.
  7. 액세스 토큰은 빠르게 만료되며 6과정에서 같이 받은 만료가 긴 refresh 토큰으로 재발급 받을 수 있습니다.

 

 

'Back End' 카테고리의 다른 글

django 핵심 기능 - Model  (0) 2022.05.19
django 개발의 기본 사항  (0) 2022.05.19
토큰 기반 인증 시스템과 JWT  (0) 2022.04.19
AWS의 ALB, NLB  (0) 2022.04.12
django serializer란  (0) 2022.04.12
Comments