Authentication(인증)과 구분되는 개념으로 사용자의 권한을 확인해주는 절차
ⓐ 인증 : 사용자의 '신원' 확인
ⓑ 인가 : 사용자의 '권한' 확인
e.g. 구글, 네이버, 카카오의 <간편 로그인> 서비스
'무신사'에 회원 가입 시 "카카오 로그인" 선택
=> 카카오에서 사용자 신원을 확인하여 "무신사"에 사용자 정보를 전달
: 인가를 위한 개방형 표준 프로토콜
- User : 웹 애플리케이션 또는 모바일 앱의 사용자(나)
- Client: 리소스에 접근하기 위해 인증 및 권한 부여를 요청하는 제3자 앱이 클라이언트(App XYZ)
- Authorization Server: 클라이언트의 요청에 대해 인증 및 권한 부여를 처리하는 서버입니다. 사용자의 동의를 받고, 액세스 토큰을 발급하며, 클라이언트에게 권한을 부여
- Resource Server : 실제 사용자의 리소스를 가지고 관리하는 서버
ⓐ Client는 인증 서버에 "authorization request"를 보냄
ⓑ 인증 서버는 사용자 인증을 거쳐 Client에 < authorization code > 를 발급
ⓒ Client는 < authorization code >를 가지고 access token을 요청
ⓓ 인증 서버는 access token을 발급
ⓔ Client는 access token을 가지고 사용자 리소스를 요청
ⓕ 리소스 서버는 인증 서버에 해당 access token이 유효한지 검사 요청
ⓖ 인증 서버가 access token의 유효성 검증을 완료하면 비로소 리소스 서버는 Client에 리소스를 제공하게 된다.
※ ⓔ ~ ⓖ 의 과정이 Web API에 해당
※ Terminology for OpenID
IdP (Identity Provider)
구글, 카카오, 네이버 ( OpenID 서비스를 제공하는 당사자)
RP (Relying Party)
제 3자(Client)로 사용자를 인증하기 위해 IdP에 의존하는 주체
ⓐ RP(eBay,3rd party, client)는 IDP(구글)에 ID Token과 Access Token을 요청
ⓑ IDP는 사용자(나)에게 eBay에 나의 리소스(개인 정보)에 접근할 수 있도록 할지 물어봄
ⓒ IDP는 RP에 'short-lived' Authorization code를 발급
ⓓ RP는 Authorization code를 가지고 IDP에 Access 토근과 ID토큰 요청
ⓔ RP는 Access 토큰과 ID토큰을 가지고 자원 요청을 수행
JWT(Json Web Token)형식으로 토큰 전달
JWT 형식
JWT를 디코딩하면 다음과 같은 정보를 확인할 수 있다
Scope(리소스 접근 권한 범위) for Open ID
- profile: 사용자의 기본 프로필 정보에 대한 액세스 권한
- email: 사용자의 이메일 주소에 대한 액세스 권한
- address: 사용자의 주소 정보에 대한 액세스 권한
▶ 마치며
여기까지 네트워크 환경에서 Authorization을 알아보았다.
User 혹은 Process가 시스템의 자원에 접근하는 것 또한 인증과 인가의 절차가 필요하며 이를 "OS Access Control"이라 한다.