보안/인증

인프런:생활코딩 - Web2 - OAuth 2.0 학습 정리

bluebamus 2022. 1. 21.

1. 정의 

    1) facebook, twitter의 기능을 현재 운영하고 있는 서비스에서 접근, 생성, 수정, 삭제 등을 수행하고자 할 때, 각 권한

       에 대한 접근제한이 요구되며 이 때 운영하는 서비스는 OAuth를 이용해 접근하고자 하는 서비스에게 요구되는

       권한이 할당된 AccessToken을 요청받아 관련한 작업을 수행할 수 있음

 

2. 용어 정리

    1) 접근하고자 하는 외부 서비스 : Resource Server (데이터를 가지고 있는 서버), Authorization Server (인증 서버)

    2) 해당 정보의 주체자, 사용자 : Resource Owner

    3) 현재 운영하고 있는 AccessToken 접근 서비스 : Client

 

3. 처리 과정

    1) 공통적으로 가지고 요청하는 정보

        - Client ID : 현재 만들고 있는, 운영하고 있는 어플리케이션 식별자

        - Client Secret : 비밀번호 (절대 외부에 노출되면 안됨)

        - Authorized redirect URIs : 권한을 부여하는 과정에서 Authorized code를 전달함, 이 코드를 전송할 주소

 

4. Resource Owner의 승인

    1) Resource Owner는 처음 로그인을 할 경우, 외부 서비스에 1회 직접 로그인 한다

        - 로그인 후, 현재 접속하고 있는 서비스에 어떤 권한을 제공할지 승인한다

        - Resource Server는 Client id가 맞는지, 접속한 redirect URL이 동일한지 확인한다

        - 맞다면, Resource Server는 해당 권한 요청을 사용자 DB에 저장한다.

 

5. Resource Server의 승인

    1) Resource Server는 사용자 로그인과 권한 승인 후 바로 토큰을 발급하지 않는다.

        - 임시비밀번호 authorization code를 사용자에게 전송한다

        - 해당 임시번호는 http 헤더에 location으로 redirect 주소와 함께 전달된다

        - redirect 주소는 현재 접속한 서비스 callback 주소로 이를 통해 client가 임시 비밀번호를 알게 된다

        - client는 전달받은 임시비밀번호를 이용해 Resource Server에게 토큰을 요청한다

        - Resource Server는 Client Id, Client Secret, Authorization code, Redirect uri를 확인한다

     * 해당 방법 외, 추가적인 절차가 더 있는 경우가 있다. 

 

6. 액세스 토큰 발급

    1) AccessToken 발급

        - 최초 요청 메시지의 Authorization code은 만료, 삭제시킨다.

        - AccessToken을 생성하고 Client에게 전달한다. Client는 이 정보를 DB에 저장한다

        - Client는 AccessToken을 사용하여 Resource Server에 주어진 권한 내 작업 수행 및 데이터를 요청

 

7. API 호출

    1) 각 서비스들은 API 문서를 제공함 예) 구글 캘린더

        - 원 주소 : URIs relative to https://www.googleapis.com/calendar/v3  

         - API 하위 주소 : get = GET  /calendars/calendarId/acl/ruleId

                                delete = DELETE  /calendars/calendarId/acl/ruleId

         - 원 주소 뒤에 원하는 하위 주소의 정보를 붙여서 요청하면 된다

     2) 요청하는 방법은 가장 많이 사용되는 것으로 2가지가 있다

         - Access Token을 쿼리 스트링 파라미터러 전달하는 방식

             - GET https://www.googleapis.com/drive/v2/files?access_token= 

         - Access Token을 HTTP header의 Authorization: Bearer로 입력하는 방식

             - GET /drive/v2/files HTTP/1.1

               Authorization: Bearer <access_token>

               Host: www.googleapis.com/

 

8. Refresh Token

    1) Access Token은 기본적으로 생명 주기가 있다.

        - 갱신을 매번 사용자의 로그인 과정으로 수행하기에는 무리가 있다

 

    2) 자동으로 Access Token을 갱신하는 방법

        -  표준 문서에는 Acces Token과 Refresh Token을 같이 받는걸로 되어 있지만,

           실재 실무 구현에서는 그렇지 않을 경우도 많다

   

        - Refresh Token은 Access Token과 같이 발급되며 요청하는 방법, 갱신 방법 등은

          각 서비스별로 다르기 때문에 해당 서비스 문서를 참고하는게 좋다

 

     3) https://tools.ietf.org/html/rfc6749#section-1.5 

 

rfc6749

 

datatracker.ietf.org

 

Refresh Token Flow

 

'보안 > 인증' 카테고리의 다른 글

iptalbes로 3306 추가 및 저장 방법  (0) 2023.06.20

댓글