OAuth 편집하기

IT위키

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
[[분류:보안]]
[[분류:보안]]
;제3의 신뢰 서비스에서 인증 결과를 토큰 기반으로 공유받아 활용하는 개방형 표준 프로토콜


;자신이 소유한 리소스에 소프트웨어 애플리케이션이 접근할 수 있도록 허용해 줌으로써 접근 권한을 위임해주는 개방형 표준 프로토콜
== 인증 절차 ==


*애플리케이션이 리소스 소유자에게 리소스에 대한 접근 권한을 허용하고, 요청 결과로 전달받은 토큰을 이용해 애플리케이션이 해당 리소스에 접근하는 프로토콜


==역사==
== 구성 ==


*여러 웹 서비스를 연계하여 사용토록 하기 위해 OpenID 이용
== 문제점 ==
*API 접근 권한 관리를 위해 구글의 AuthSub, 야후의 BBAuth 등을 참고하여 OAuth 1.0 개발
*OAuth의 세션 고정 공격을 보완한 OAuth 1.0a 개발
*OAuth 1.0a는 IETF에서 RFC 5849<nowiki/>로 정리됨
**OAuth 커뮤니가 성장하여 여러 메커니즘에 대한 논의 시작
*OAuth의 구조적인 문제점을 해결하고, 핵심요소만을 차용한 유사 프로토콜 WRAP(Web Resource Access Protocol) 발표
*WRAP을 기반으로 OAuth 2.0 개발(RFC 6749, RFC 6750)
*OAuth 2.0은 메커니즘이 하나로 통일되지 않아 4가지 타입으로 발표됨
 
== 관련 표준 ==
 
* [rfc:6749 RFC6749 "OAuth 2.0"]
* [rfc:6749 RFC6750 " The OAuth 2.0 Authorization Framework: Bearer Token Usage"]
* [rfc:7519 RFC7519 "JSON Web Token (JWT)"]
* [rfc:7636 RFC7636 "Proof Key for Code Exchange by OAuth Public Clients"]
 
==구성과 종류==
===구성===
 
*'''리소스 소유자''': API에 대한 권한을 가지고 있으며, 이를 위임할 수 있는 이용자
*'''보호된 리소스''': 리소스 소유자가 접근하는 대상
*'''클라이언트''': 리소스 소유자를 대신해 보호된 리소스에 접근하는 소프트웨어 등
*'''인가 서버''': 리소스에 접근할 수 있는 접근 토큰을 발급
 
==프토토콜 종류==
{| class="wikitable"
!종류(Type)
!설명
|-
|인가 코드 승인
(Authorization Code Grant)
|
*클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용
*리스소 접근을 위해, 인가 서버에서 받은 권한 코드로 리소스에 대한 엑세스 토큰을 받는 방식
|-
|암묵적 승인
(Implicit Grant)
|
*권한 부여 코드 승인 타입과 다르게 권한 코드 교환 단계가 없음
*엑세스 토큰을 즉시 반환받아 이를 인증에 이용하는 방식
|-
|리소스 소유자 암호 자격 승인
(Resource Owner Password Credentials Grant)
|
*클라이언트가 암호를 사용하여 엑세스 토큰에 대한 사용자의 자격 증명을 교환하는 방식
|-
|클라이언트 자격 승인
(Client Credentials Grant)
|
*클라이언트가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식
|}
 
==인증 절차==
===권한 부여 코드 승인===
[[파일:Authorization Code Grant Type.png]]
 
===암시적 승인===
[[파일:Implicit Grant Type.png]]
 
===리소스 소유자 암호 자격 증명===
[[파일:Resource Owner Password Credentials Grant.png]]
 
===클라이언트 자격 증명===
[[파일:Client Credentials Grant Type.png]]
 
==구성==
{| class="wikitable"
!구분
!설명
!비고
|-
|자원 소유자
|요청하고자 하는 자원의 소유자이자, 인증 주체
|이용자
|-
|클라이언트
|자원을 필요로 하는 서비스
자원 소유자의 권한으로 권한 서버에서 인증을 받아 자원 서버에 자원 요청
|쇼핑몰 등
|-
|권한 서버
|인증을 처리하고 권한을 부여하는 서버
| rowspan="2" |페이스북
네이버
구글 등
|-
|자원 서버
|자원을 가지고 있는 서버
|-
|접근 토큰
|자원 서버에 자원을 요청할 수 있는 토큰
|유효기간 존재
|-
|재발급 토큰
|권한 서버에 접근 토큰을 요청할 수 있는 토큰
|접근 토큰 유효기간 만료 시 사용
|}
 
==OAuth1.0과 OAuth2.0의 차이==
{| class="wikitable"
!비교
![[OAuth1.0]]
![[OAuth2.0]]
|-
|참여자 구분
|
*이용자
*소비자
*서비스 제공자
|
*자원 소유자
*클라이언트
*권한 서버
*자원 서버
|-
|토큰
|
*요청 토큰(Request Token)
*접근 토큰(Access Token)
|
*접근 토큰(Access Token)
*재발급 토큰(Refresh Token)
|-
|유효기간
|
*접근 토큰의 유효기간 없음
|
*접근 토큰 유효기간 부여
*만료 시 재발급 토큰 이용
|-
|클라이언트
|
*웹 서비스
|
*웹, 앱 등
|}
 
==문제점==
 
*OAuth를 제공하는 대형 플랫폼 서비스(신뢰된 서비스, 권한 서버, 자원 서버)에 개인의 행태 정보가 지나치게 축적되는 문제
**국가 기관이 아닌 신뢰된 서비스가 과연 신뢰할 수 있는가?
 
==참고 문헌==
 
*OAuth 2 IN ACTION(에이콘 출판사)
IT위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 IT위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소 편집 도움말 (새 창에서 열림)
원본 주소 "https://itwiki.kr/w/OAuth"