OAuth2.0는 사용자가 자신의 비밀번호를 제공하지 않고 신뢰할만한 써드 파티 애플리케이션(페이스북, 구글, 네이버 등) 상 보안된 자신들의 리소스에 대해 다른 웹사이트에 접근 권한을 부여할 수 있는 개방형 표준 프로토콜 중 한 종류이다.
OAuth2는 보안된 리소스에 액세스 하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜 중 한 방법이다. 최근 많이 이용하는 소셜 로그인이 OAuth2.0 을 사용한 것이다.
OAuth2를 통한 인증은 로그인 인증 정보를 백엔드 애플리케이션에서 직접적으로 관리하지 않는다.
예를 들면, 로그인 자체는 네이버 인증을 이용하고, 로그인에 성공하면 액세스 토큰을 전달 받아서 네이버 캘린더 API를 사용하기 위해 해당 액세스 토큰을 이용하는 것이다.
이렇게 되면 직접적으로 네이버의 크리덴셜이 제공되지 않기 때문에 Client에서 사용하는 크리덴셜 저장소에 저장할 필요가 없어 사용자의 크리덴셜을 이중으로 관리하지 않아도 된다.
Resource Owner(리소스 소유자): 액세스 중인 리소스의 유저. 서비스를 이용하는 사용자를 말한다.
Client: Resource owner를 대신하여 보호된 리소스에 액세스하는 응용 프로그램.
Resource server: client의 요청을 수락하고 리소스를 제공하는 서버
Authorization server: Resource server가 액세스 토큰을 발급하는 서버(접근 권한을 부여하는 서버)
Authorization grant: 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명. 여러 타입이 있음
Authorization code: access token을 발급하기 전에 필요한 code
Access token: 보호된 리소스에 액세스 하는데 사용되는 credentials
Scope: 주어진 액세스 토큰을 사용하여 액세스 할 수 있는 범위
권한 부여 승인 코드 방식
자체적으로 생성한 Authorization code를 전달하여 권한을 부여 승인을 진행하는 방식
Refresh token 사용 가능
응답 타입(response_type
) → code
로 지정하여 요청
암묵적 승인 방식
Authorization Code 없이 바로 액세스 토큰 발급
자격증명을 안전하게 저장하기 어려운 경우에 최적화된 방법
Refresh token 사용 불가능
응답 타입(response_type
) → token
로 지정하여 요청
자격 소유자 자격 증명 승인 방식
로그인 시 필요한 정보로 액세스 토큰 발급
Authorization Server, Resource Server, Client가 모두 같은 시스템에 속할 때 사용
자신의 서비스에 제공하는 애플리케이션의 경우에만 사용
예: 네이버 계정으로 네이버 웹툰 로그인
Refresh token 사용 가능
클라이언트 자격 증명 승인 방식
Client 자신이 관리하는 리소스 또는 authorization server 에 제한된 리소스 접근 권한이 설정된 경우 사용 가능
자격 증명을 안전하게 저장할 수 있는 클라이언트에서만 사용해야 함
Refresh token 사용 불가