OAuth2.0

hyyyynjn·2021년 3월 19일
0
post-thumbnail

OAuth2.0 개념

  • OAuth는 구글, 페이스북, 카카오톡으로 로그인이 가능하도록 하는 API이다.
    • 잘 활용하면 세션관리, 개발 비용, 운영 비용을 줄일 수 있다.
  • Open Authorization == OAuth
    • 제 3의 앱이 자원의 소유자인 서비스 이용자를 대신하여 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법이다.
    • 인증을 위한 오픈 표준 프로토콜이다.
    • OAuth1.0 과 OAuth2.0
      • 1.0 : 웹 애플리케이션 이외의 애플리케이션(안드로이드, ios 등)에서는 사용하기 곤란함
      • 2.0 : 보안강화를 위한 Access Token Life-time 을 지정하여 사용가능

OAuth2.0 용어

  1. User
    • Service Provider에 계정을 가지고 있으면서, Consumer를 이용하려는 사용자
  2. Service Provider
    • OAuth를 사용하는 Open API를 제공하는 서비스
  3. Consumer
    • OAuth 인증을 사용하여 Service Provider의 기능을 사용하려는 애플리케이션이나 웹 서비스
  4. Request Token
    • Consumer가 Service Provider에게 접근 권한을 인증받기 위해 사용하는 값이다.
    • 인증이 완료된 후에는 Access Token으로 교환한다.
  5. Access Token

OAuth의 주체 4가지

  1. client
    • resource owner의 보호된 자원에 접근하는 애플리케이션.
    • 웹이나 앱이다.
  2. resource owner
    • 자원 소유자. 보호된 자원에 접근하는 권한을 제공.
    • 유저이다.
  3. resource server
    • 요청을 수신하고 권한을 검증하여 결과(자원)을 응답.
  4. authorization server
    • resource owner에 권한을 부여.

OAuth2.0 동작방식 (1)

  1. client -> resource server

    • oauth 사용 요청을 한다
  2. resource sever -> client

    • client ID, client secret 정보를 준다.
    • 이때, 어떤 information만 요청할 것인지 scope를 지정해주는게 좋다.
  3. 1,2를 바탕으로 client에 client Oauth를 붙이면, 사용자가 이를 클릭한다.

  4. resource owner -> client

    • oauth 버튼을 누르면, client에서 어떤 정보가 필요하고 이를 승인해줄 것인지 묻는다.
    • 승인 버튼을 누르면, resource owner는 server로 접속하여 해당 server에 로그인하고 정보 제공하는 것을 허락한다.
  5. server -> client

    • 승인이 완료되면, server는 client에게 code(비밀번호)를 제공한다.
  6. client -> server

    • client는 code, id, secret값을 server로 보낸다.
    • 이때 허락받은 client가 맞는지 확인한다.
  7. server -> client

    • server는 client에게 access token을 발급한다.
    • client는 받은 access token을 보관해야한다.
      • 최초로 발급된 access token response에는 refresh token이 함께 전송된다.
        • access token 만료시에는 동작하지 않기 때문에, refresh token을 활용하여 주기적으로 업데이터 되는 access token을 받아와서 resource server에 data 요청을 해야한다.
        • refresh token은 access type을 offline으로 설정할 경우에만 해당되어 발급되므로 유출되지 않도록 보관해야 한다.
        • refresh token을 담아 POST 요청하면 새로운 access token을 받아올 수 있다. (android에서 getAccessToken(), refresheToken() 과 같은 함수로 활용가능)
  8. client

    • client는 access token을 통해 resource server에 사전 승인된 정보를 언제든지 얻을 수 있게 된다.
    • 공식문서에 data를 요청하는 url 파라미터 양식을 활용한다.
  9. client

    • owner의 정보를 받아온 client는 이를 활용하여 owner에게 service를 제공할 수 있게 된다.

OAuth2.0 동작방식 (2)

  1. resource owner -> client -> authorization server
    • resource owner는 client를 통해 authorizaion server에 인증을 받고 권한을 허가한다.
Method: GET 
https://{인증서버}/oauth/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}
  1. authorization server -> client

    • authorization server는 권한 허가와 authorization code를 발급한다.
      • code를 담은 redirect URL을 통한 응답으로 발급한다.
      • {리다이렉트 URL}?code={code}
  2. 전달받은 {리다이렉트 URL}를 통해 브라우저는 client backend 서버로 redirect 되며 authorization code를 전달한다.

  3. client backend는 {인증서버}로 client backend에서 가지고 있는 client_id, client_secret과 리다이렉트로 전달받은 grant type, authorization code, {리다이렉트 URL}을 보낸다.

  4. {인증서버}로부터 access token을 발급받는다.

OAuth2.0 특징

  • 보안이 철저하게 보장된다
  • 절차가 복잡하다.

구글 OAuth2.0

  • api 라이브러리 에서 사용하고자하는 api를 실행시킨다.
    • 당연히 accessToken을 발급 받은 뒤에 사용가능하다.
  • 사용자 인증 정보 페이지에서 api 및 oauth client id를 발급받아 secret.gradle에 정보를 입력한다.

1개의 댓글

comment-user-thumbnail
2021년 5월 4일

좋은 글 감사합니다. 정말 깔끔하게 정리해주셨네요.
덕분에 개념을 정리하는 데 도움이 많이 되었습니다!

답글 달기