오늘 뭐했냐/개발에 대한 주저리

23.08.17 OAuth

스스로에게 2023. 8. 25. 00:32

OAuth (Open Authorization)는 사용자가 하나의 서비스 (예를 들어, Google 또는 Facebook)의 자격 증명을 사용하여 다른 서비스에 로그인할 수 있도록 하는 표준 인증 프로토콜. 이는 사용자가 각각의 서비스에 대해 별도의 아이디와 비밀번호를 만들 필요가 없도록 해 준다. 또한, OAuth는 사용자가 특정 서비스에 다른 서비스의 일부 기능에 접근할 수 있게 허가할 수 있는데 예를 들어, 사용자가 트위터 계정에 연결된 앱에게 트윗을 작성하거나 팔로워 목록을 볼 수 있는 권한을 부여할 수 있다.

 

OAuth의 주요 개념

1. Resource Owner: 리소스(데이터, 기능 등)의 소유자, 일반적으로 사용자입니다.
2. Resource Server: 리소스를 호스팅하는 서버, 예를 들면 Google Drive, Twitter 등입니다.
3. Client: 리소스에 접근하려는 애플리케이션 또는 서비스입니다.
4. Authorization Server: 사용자의 자격 증명을 확인하고, 이에 따라 액세스 토큰을 발급하는 서버입니다.


OAuth 작동 과정

1. 사용자가 "Client" 서비스에 로그인하려고 시도합니다.
2. Client는 사용자를 "Authorization Server"로 리다이렉트하여 로그인하고 권한을 부여하도록 요청합니다.
3. Authorization Server에서 로그인과 권한 부여가 성공적으로 이루어진 후, 사용자는 다시 Client로 리다이렉트됩니다. 이 과정에서 "Authorization Code"가 함께 전달됩니다.
4. Client는 이 Authorization Code를 Authorization Server에 보내어 액세스 토큰을 요청합니다.
5. 액세스 토큰을 받은 Client는 이를 사용하여 Resource Server에 접근합니다.

 

클라이언트에서 로그인 시도 -> 인증 서버(사용자 인증) -> 코드 전달 및 클라이언트 -> 코드로 인증 서버에 엑세스 토큰 요청  -> 토큰으로 리소스 서버에 리소스 사용 권한이 생김


OAuth 2.0은 현재 가장 널리 사용되는 버전이다.

 

구글 로그인이라면

  1. 요청: 사용자가 어플리케이션에서 특정 기능(예: 구글 캘린더 정보 가져오기)을 사용하려 할 때, 해당 앱은 사용자를 구글 로그인 페이지로 리다이렉트합니다.
  2. 인증: 사용자는 구글에서 자신의 아이디와 비밀번호로 로그인합니다.
  3. 권한 부여: 로그인 후, 구글은 사용자에게 해당 앱이 요청한 자원에 접근하는 것을 허용할 것인지 묻습니다. 사용자가 동의하면 구글은 권한 부여 코드를 생성합니다.
  4. 콜백: 구글은 사용자를 원래의 앱으로 리다이렉트시키면서, 앞서 생성한 권한 부여 코드를 콜백 URL을 통해 앱에 전달합니다.
  5. 토큰 요청: 앱은 받은 권한 부여 코드를 사용하여 구글에게 액세스 토큰을 요청합니다.
  6. 토큰 응답: 구글은 액세스 토큰을 앱에게 제공합니다.
  7. 자원 접근: 앱은 이제 해당 액세스 토큰을 사용하여 사용자의 구글 캘린더 정보와 같은 허용된 자원에 접근할 수 있습니다.

콜백이 필요한 이유 

안전성: 사용자는 자신의 계정 정보를 직접적으로 어플리케이션에 제공하지 않습니다. 대신 서비스 제공자의 페이지에서 권한을 부여하고, 그 결과가 콜백 URL을 통해 어플리케이션에 전달됩니다. 이러한 방식으로 사용자의 계정 정보는 어플리케이션과 분리되어 있어 안전합니다.

통합된 사용자 경험: 사용자는 서비스 제공자의 페이지에서 권한 부여 작업을 수행한 후, 자동으로 원래의 어플리케이션으로 돌아갑니다. 이를 통해 연속적이고 통합된 사용자 경험을 제공할 수 있습니다.

인증 및 권한 부여 상태 전달: 콜백 URL은 OAuth 프로토콜에서 중요한 정보를 전달하는 수단입니다. 예를 들어, 권한 부여 코드(authorization code)가 콜백 URL을 통해 어플리케이션에 전달되며, 이 코드를 사용하여 액세스 토큰(access token)을 얻을 수 있습니다.

오류 처리: 만약 사용자가 권한을 부여하지 않거나 다른 오류 상황이 발생할 경우, 이 정보는 콜백 URL을 통해 어플리케이션에 전달됩니다. 이를 통해 어플리케이션은 적절한 오류 메시지를 사용자에게 표시할 수 있습니다.

 

 

카카오 로그인 경험과 구현했을 때 로직을 비교해서 생각하면 도움이 된다.

'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글

23.08.19 쓰레드(thread)  (0) 2023.08.27
23.08.18 프로세스 (Process)  (0) 2023.08.26
23.08.16 RDBMS와 No SQL  (0) 2023.08.23
23.08.15 아키텍쳐 설계  (0) 2023.08.22
23.08.14 passport.js  (0) 2023.08.21