겁나 빠른 웹 레시피

구글 API를 통해서 배우는 인증 (oauth 2.0)

수업소개

API를 사용하는데 큰 걸림돌은 인증입니다. 사용자에게 최적화된 서비스를 제공하기 위해서는 그 사용자의 정보에 접근할 수 있어야 합니다. 많은 서비스가 인증을 위한 방법으로 oauth 2.0을 사용하고 있습니다. 여기서는 oauth 2.0의 원리를 알아보고, 인증에 대해서 좀 더 자신감을 가질 수 있도록 도와드립니다.  

사용기술

주요개념

API의 사용, SDK의 이용, oauth 2.0을 이용한 인증

참고

수업

수업소개

동작 메커니즘

API 접속하기

 

oauth 사용하기

 

code 획득 절차

 

token 받기

access token 사용하기

 

refresh token 사용하기

 

SDK 사용

 

예제

login.html

사용자를 Resource Server의 인증 페이지로 보내는 URL 생성

<html>
  <body>
    <a href="https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly&access_type=offline&include_granted_scopes=true&state=state_parameter_passthrough_value&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2FreceiveCode.php&response_type=code&client_id=3870214908-3fur6lisge1riduu6bfncvg1q15bs0k2n.apps.googleusercontent.com">구글 API를 사용할 수 있도록 허용하러 가기</a>
  </body>
</html>

receiveCode.php

Resource Server가 전달해준 Authorization code를 받아서 Access Token과 교환하기 위한 정보를 생성하는 페이지

<!DOCTYPE html>
<html>
  <body>
    <style>
      input{
        width:300px;
      }
    </style>
      <a href="login.html">login</a>
      <form action="https://www.googleapis.com/oauth2/v4/token" method="post" enctype="application/x-www-form-urlencoded">
        code : <input type="text" name="code" value="<?=$_GET['code']?>"><br>
        client_id : <input type="text" name="client_id" value="3870214908-3fur6lisge1riduu6bfncvgq15abs0k2n.apps.googleusercontent.com"><br>
        client_secret : <input type="text" name="client_secret" value="teUYcbqLdUq13UTwd90J6feK"><br>
        redirect_uri : <input type="text" name="redirect_uri" value="http://localhost:8888/receiveCode.php"><br>
        grant_type : <input type="text" name="grant_type" value="authorization_code"><br>
        <input type="submit">
      </form>

  </body>
</html>

refreshToken.php

access token 값을 새로 발급 받기 위한 방법

<!DOCTYPE html>
<html>
  <body>
    <form action="https://www.googleapis.com/oauth2/v4/token" method="post" enctype="application/x-www-form-urlencoded">
      <input type="text" name="client_id" value="3870214908-3fur6lisge1riduu6bfncvgq15bs0k1n.apps.googleusercontent.com"><br>
      <input type="text" name="client_secret" value="teUYcbqLdUqg3UTwd90J4feK"><br>
      <input type="text" name="refresh_token" value="1/Eatu7T-ge3I1ekgK3E5rv24cbZdRIH84H00W14MYZbY"><br>
      <input type="text" name="grant_type" value="refresh_token"><br>
      <input type="submit">
    </form>
  </body>
</html>

 

댓글

댓글 본문
작성자
비밀번호
  1. 뭉뭉이
    2번째 봐야 머리속에서

    정리가 되는군요.. ^^;;

    감사합니다!
  2. 승쭈
    감사합니다.!!!
  3. 감사합니다
  4. 코딩무뢰한
    안녕하세요? 많은 도움이 되고 있습니다. 궁금한 점은 client 의 서비스에 여러 resource owner가 접속하여 사용 할 경우 1번 resource owner의 동의와 client ID, secret를 통해 받은 access code는 2번 resource owner가 접속시에는 소용이 없는 것 아닌지요? 그렇다면 결국 refresh token이라는 것이 왜 필요한지 잘 모르겠습니다. 어짜피 접속시마다 access token이 새로 부여될텐데 말이죠...
    초보자의 질문이라 두서 없습니다.
  5. 몽몽이
    좋은강의감사합니다~
  6. yoojat
    저에게 정말 필요한 수업이었는데 ㅠㅠ 정말 감사합니다
  7. eukrasie
    좋은 강의 감사히 잘 봤습니다.
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기