ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OAuth2.0] OAuth2.0 개요
    생활코딩/WEBn 2020. 9. 30. 17:57

    [강의 출처] opentutorials.org/course/3405

     

    WEB2 - OAuth 2.0 - 생활코딩

    수업소개 사용자가 가입된 서비스의 API에 접근하기 위해서는 사용자로부터 권한을 위임 받아야 합니다. 이 때 사용자의 패스워드 없이도 권한을 위임 받을 수 있는 방법이 필요합니다. 이를 위�

    opentutorials.org


    OAuth2.0란?

    • 언제: 사용자(Resource Owner)가 나의 서비스(Client)를 이용할 때,
    • 무엇을: 나의 서비스가 사용자가 이용하는 다른 서비스(구글이나 페이스북 등 Resource Server)와 상호작용할 수 있도록
      • 구글 캘린더에 이벤트를 대신 추가해준다거나
    • 어떻게: 다른 서비스쪽에서 사용자 로그인 정보를 받아서, 나의 서비스에게 특정 권한을 부여한 accessToken을 발급하여
    • 왜: 인증을 보안 이슈 없이 안전하게 처리할 수 있는 방식

     

    OAuth2.0 순서

    1. Client가 Resource Server에 등록(register)한다.
      1. Client ID(아이디), Client Secret(비밀번호), Authorized redirect URIs(인증 후 사용자가 확인하게 될 페이지, 다른 URI에서 요청이 들어오면 인증 거부된다)
    2. Client는 Resource Owner가 로그인할 수 있도록, 자신의 페이지에 리다이렉트 버튼을 만든다.
      1. 리다이렉트 경로는 이런 형식이다: https://resource.server/?client_id=id&scope=B&redirect_uri=https://redirect.uri
      2. Resource Server에서 제공하는 기능을 scope라고 한다. 위의 예시는 기능 B에 대한 요청.
    3. Resource Owner가 Client의 버튼을 통해 로그인하고, 권한을 허용한다.
      1. Resource Owner가 리다이렉트 버튼을 통해 접속을 시도하면, Resource Server는 로그인 여부를 확인한다.
      2. 로그인이 완료되면, Resource Server는 client_id값과 일치하는 id값이 있는지 확인하고,
      3. id가 존재한다면 해당 client_id의 redirect URL이 맞는지를 확인한다. 아니라면 거기서 종료.
      4. URL이 일치한다면, Resource Server는 해당 scope에 대한 권한을 허용할 것인지 Resource Owner에게 묻는다.
      5. Resource Owner가 권한을 허용하면 다음 단계로 진행, 아니라면 거기서 종료.
    4. Resource Server(Authorization Server)는 Client 승인 과정을 거쳐 accessToken을 발급한다.
      1. Resource Server는 authorization code(임시 비밀번호)를 발급해 Resource Owner에게 전송한다.
      2. authorization code는 redirect시에 header location값으로 https://client/callback?code=3 형태로 전송된다.
      3. Resource Owner가 해당 페이지로 redirect하면, Client는 code를 획득하여 아래처럼 Resource Server에 접속한다
      4. https://resource.server/token?grant_type=authorization_code&code=3&redirect_uri=http://redirect.uri&client_id=id&client_secret=2 (다른 방식으로 전달하면 grant_type이 다를 수 있다)
      5. Resource Server는 Client가 전송한 code, id, secret, redirect uri가 모두 일치하는지 확인한 다음,
      6. Resource Owner의 계정에 대해 scope 범위의 권한이 허용된 accessToken을 발급한다.
    5. accessToken을 획득한 Client는 Resource Server에서 제공한 API를 호출해서 요청을 처리한다.
      1. API는 Resource Server의 개발자페이지 등에서 찾을 수 있다.
      2. 만약 쿼리스트링으로 되어있는 경우, 이런 형식이다:
      3. https://www.googleapis.com/calendar/v3/users/me/calendarList?access_token=token
      4. Authorization Bearer의 경우, Bearer 부분을 헤더값으로 전송한다:
      5. curl -H "Authorization: Bearer <access_token>" https://url (curl는 웹페이지를 텍스트 형태로 보여준다)
    6. 만약 accessToken이 만료되었다면, Client는 Refresh token을 전송해서 accessToken을 갱신한다.
      1. Refresh token은 accessToken 발급시에 함께 발급해주는 것이 일반적이다.
      2. accessToken이 만료되면, Client가 client_id, client_secret, refresh token을 Resource Server에게 전송하고,
      3. 정보가 맞다면 Resource Server는 새 accessToken과 유효기간을 반환해준다.

     

     

    댓글

Designed by Tistory.