Post
EN

OAuth2 정리

OAuth2 정리

공식문서 사이트에서 번역기 돌려가며 알아보자.

OAuth의 등장은 앞서 이야기했던 http://kkforgg.blog.me/220609109121 에서 확인하면 된다.

 **

  1. 역할

OAuth2.0 에는 네가지 역할이 정의되어 있다.

Resource Owner

Resource server에 있는 자원의 소유자. 사람이 소유자가 될 필요는 없다. 애플리케이션이나 기계가 자원의 소유자가 될 수도 있다.

Resource Server (Service Provider)

자원(protected resource)를 제공하는 서버다. Client는 access token을 이용해서 자원에 접근할 수 있다.

Client

Cleint는 유저 계정에 접근을 시도하는 애플리케이션이다. 애플리케이션의 사용을 위해서 로그인이 필요한 경우도 있다.

Authorization Server

인증을 수행하는 서버로 로그인 및 접근허가 여부를 검사해서 Authorization code과 access token을 발행하는 일을 한다..

 **

(A) 클라이언트는 자원소유자에게 인증 요청을 한다. 인증 요청은 자원 주인에게 바로 정해질 수 있다.

(B)는 클라이언트 인 권한 부여를 수신 자원 소유자의 권한을 대표하는 자격 증명,**네 허가 유형 중 하나는 본 정의하여 표현 사양 또는 연장 허가 유형을 사용하여. 그만큼권한 부여 타입에 의해 사용 된 방법에 따라 요청 및 허가 클라이언트에 의해 지원 형식 인증 서버.

(C)는 클라이언트에 의해 인증 토큰을 접속 요청 인증 서버 및 권한 부여를 제시.

(D)는 인증 서버가 클라이언트 인증을 확인하여 권한 부여를 진행. 유효한 경우 엑세스토큰을 발급

(E)는 자원서버의 엑세스 토큰을 Client에게 발급.

(F) 자원서버는 엑세스 토큰이 유효한지 검사한다. 만약 유효하면 요청을 수행한다.

원문 :

(F)  The resource server validates the access token, and if valid,  serves the request.

**여기서 Client가 Resource Owner로 부터 권한 인증서를 얻어오는 방법은 Authorization Server를 중개인으로 둬서,  Authorization Sever를 통해 Resource Owner로 부터 권한 인증서를 얻어오는 방법을 추천하고 있다.

다음에는 직접 오픈 소스를 이용해 OAuth를 간단한 예제를 구현해 보겠다. 조금 더 한글로 자세히 정리된 곳을 보고 싶다면, 아래 참조 사이트의 [링크]를 따라가 보면 된다.

OAuth에서 권한 획득 방법


Authorization Code

웹 서버에서 API를 호출하는 등의 시나리오에서 Confidential Client가 사용하는 방식이다. 서버사이드 코드가 필요한 인증 방식이며 인증 과정에서 client_secret 이 필요하다.

로그인시에 페이지 URL에 response_type=code 라고 넘긴다.

Implicit

Token과 scope에 대한 스펙 등은 다르지만 OAuth 1.0a과 가장 비슷한 인증방식이다. Public Client인 브라우저 기반의 어플리케이션(Javascript application)이나 모바일 어플리케이션에서 이 방식을 사용하면 된다. Client 증명서를 사용할 필요가 없으며 실제로 OAuth 2.0에서 가장 많이 사용되는 방식이다.

로그인시에 페이지 URL에 response_type=token 라고 넘긴다.

Resource Owner Password Credentials

이 방식은 2-legged 방식의 인증이다. Client에 아이디/패스워드를 저장해 놓고 아이디/패스워드로 직접 access token을 받아오는 방식이다. Client 를 믿을 수 없을 때에는 사용하기에 위험하기 때문에 API 서비스의 공식 어플리케이션이나 믿을 수 있는 Client에 한해서만 사용하는 것을 추천한다.

로그인시에 API에 POST로 grant_type=password 라고 넘긴다.

Client Credentials

어플리케이션 이 Confidential Client일 때 id와 secret을 가지고 인증하는 방식이다.

로그인시에 API에 POST로 grant_type=client_credentials 라고 넘긴다.

 **

————————— 2016. 07. 01 추가 ——————————————


grant_type 분류에 따른 인증 방법

OAuth 2.0 인증시 grant_type에 따라 인증서버에서 오는 값들이 달라진다.

grant_type

parameter

client_credentials

Header

종류

Authorization

Basic Token

Body

종류

grant_type

client_credentials

password

Header

종류

Authorization

Basic Token

Body

종류

grant_type

password

username

아이디

password

패스워드

refresh_token

Header

종류

Authorization

Basic Token

Body

종류

refresh_token

refresh Token 값

grant_type

refresh_token

추후 작성 예정

출처 : http://tools.ietf.org/html/rfc6749

          http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/oAuth2/About

       http://bsnippet.tistory.com/18

git 소스 정보

https://github.com/bassemZohdy/Spring_REST_OAuth_Demo

https://github.com/bassemZohdy/Spring_REST_OAuth_Demo

bassemZohdy/Spring_REST_OAuth_DemoContribute to Spring_REST_OAuth_Demo development by creating an account on GitHub.github.com

This article is licensed under CC BY 4.0 by the author.