mj@home:~$

OAuth ?

1. HTTP에 대한 사전 지식


1) 들어가기 전에

(1) http://www.naver.com/logo.png 파일을 요청하는 HTTP Request?

GET /logo.png HTTP/1.1
Host: www.naver.com

Method SP Request_URI SP HTTP-Version CRLF 순으로 출력된다.
위의 값에서 Method = GET, Request_URI=/logo.png, HTTP-Version=HTTP/1.1이다.

Method의 종류는 다음과 같다.

Method 설명
OPTIONS 시스템에서 지원되는 메소드 종류를 확인할 수 있다.
GET URI(URL)가 가전 정보를 검색하기 위해 서버 측에 요청하는 형태
HEAD GET방식과 유사한 방식이나 웹 서버에서 헤더 정보 이외에는 어떤 데이터도 보내지 않는다.
POST 폼 입력 정보가 헤더 정보에 포함되지 않고 데이터 부분에 요청 정보가 들어간다.
PUT POST와 유사한 전송 구조를 가지기 대문에 헤더 이외에 메시지가 함께 전송된다.
DELETE 원격지 웹 서버에 파일을 삭제하기 위해 사용되며 PUT과는 반대 개념의 메소드다.
TRACE 원격지 서버에 Loopback 메시지를 호출하기 위해 사용된다.
CONNECT 웹 서버에 프락시 기능을 요청할 대 사용된다.
extension-method  

출처 : http://gyrfalcon.tistory.com/entry/HTTP-응답-코드-종류-HTTP-메소드-종류

(2) 위와 같이 요청 했지만 해당 자원이 없을 때 서버의 응답은?

HTTP/1.1 404 Not Found

HTTP-Version SP Status-code SP Reason-Phrase CRLF 순으로 출력된다.
위의 값에서 HTTP-Version=HTTP/1.1, Status-code=404, Reason-Phrase=Not Found이다.

Status-Code는 40개 정도가 존재하고 그중 많이 볼 수 있는 Status-Code를 추려보면 다음과 같다.

Status-Code Reason-Phrase
200 OK
301 Moved Permanently
302 Found
304 Not Modified
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowedad
500 Internal Server Error
503 Service Unavailable

2. OAuth


1) 용어

  • Authentication

    인증; 내 신원을 확인함.

  • Authorization

    허가; 내 신원을 확인하고, 내가 무엇을 할 수 있는지 제한
    OAuth는 여기에 해당한다. 인증을 해주고 정보를 요청하기 때문에

2) 역할

  • Resource server

    자원을 호스팅하는 서버(예; 페이스북 사진 비디오 등)

  • Resource owner

    사용자

  • Client

    Resource Server에서 제공하는 자원을 사용하는 어플리케이션
    (예; 페이스북의 뉴스를 모아서 보여주는 앱)

  • Authorization Server

    사용자의 동의를 받아서 권한을 부여하는 서버,
    일반저그올 Resource Server와 같은 URL 하위에 잇는 경우가 많음.

3. OAuth 2.0

1) 인증 종류

종류 설명
Authorization Code Grant 웹 서버에서 API를 호출하는 등의 시나리오에서 Confidential Client가 사용하는 방식
Implicit Grant token과 scope에 대한 스펙 등은 다르지만 OAuth 1.0a와 가장 비슷한 인증 방식
Resource Owner Password Credentials Grant Client에 아이디/패스워드를 저장해 놓고 직접 access token을 받아오는 방식
Client Credentials Grant 어플리케이션이 Confidential Client일 때 id와 secret을 가지고 인증하는 방식

출처 : http://earlybird.kr/1584

2) 인증 방식

  1. 사용자가 브라우저에 접속하여 어플리케이션을 요청하면 어플리케이션은 응답을 준다.
  2. 인증을 위한 사이트에 따라 로그인 버튼을 클릭한다.
    1. 브라우저는 어플리케이션에서 로그인 요청을한다.
    2. 어플리케이션은 브라우저에 302 Found를 보낸다.
    3. 브라우저는 인증 서비스에 요청을 보낸다.
    4. 인증 서비스는 브라우저에 로그인 페이지를 보여준다.
  3. ID/PW를 입력하고 로그인을 한다.
    1. ID/PW를 브라우저는 인증 서비스에 전달한다.
    2. 인증 서비스는 다시 302 Found를 브라우저로 보낸다.
    3. 브라우저, 어플리케이션, 인증 서비스 순으로 요청이 보내진다.
    4. 정상적으로 인증이 되었을 경우 브라우저에게 응답이 보내지고 인증이 완료된다.

4. 마무리

처음으로 OAuth 교육을 들으면서 사용해 보지 못한 OAuth에 대한 두려움을 조금이나마 떨칠 수 있던거 같다. 과거에 OAuth 인증 코드를 사용하여 fitbit을 인증받아 데이터를 수집해 온적 말고는 OAuth를 처음들어봤다. 아직 아무것도 하지도 않고 시작도 안한 상태이지만 그렇게 어려울거 같지 않다는 좋은 생각이 든다.