OAuth2(Open Authorization, Open Authentication 2)는 인증을 위한 표준 프로토콜
여러 서비스들의 확장(thirth party application)이 등장하면서 개인정보인 아이디와 패스워드를 제공하고 싶지 않기 때문에 JWT와 같은 AccessToken 방식의 OAuth가 등장하게 됐다. 그 후, 발전해가면서 OAuth 2.0이 등장했다.
용어 | 설명 |
---|---|
자원 소유자 (Resource Owner) | 보호된 자원에 대한 접근권한을 위임해 줄 수 있는 주체. 사람일 경우 사용자 |
클라이언트 (Client) | 자원 소유자의 허가를 받아 보호된 자원에 접근하려는 어플리케이션 |
인증 서버 (Authorization Server) | 자원 소유자의 인증 및 클라이언트의 권한 획득이 끝나면, 액세스 토큰을 발급해 주는 서버. (인증 서버와 자원 서버는 분리할 수도 있고, 하나의 서버가 두 역할을 할 수도 있다.) |
자원 서버 (Resource Server) | 보호된 자원을 가지고 있는 서버. 액세스 토큰을 가진 요청에 대해 자원을 제공해줄 수 있음 |
접근 토큰(access token) | 인증 후에 클라이언트가 보호된 자원에 접근하기 위해 필요한 값 |
용어 | 설명 |
---|---|
Authorization Code Grant Type(권한 부여 코드 승인 타입) | 클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용됩니다. 리스소 접근을 위한 사용자 명과 비밀번호, 권한 서버에 요청해서 받은 권한 코드를 함께 활용하여 리소스에 대한 엑세스 토큰을 받는 방식 |
Implicit Grant Type(암시적 승인) | 권한 부여 코드 승인 타입과 다르게 권한 코드 교환 단계 없이 엑세스 토큰을 즉시 반환받아 이를 인증에 이용하는 방식 |
Resource Owner Password Credentials Grant Type(리소스 소유자 암호 자격 증명 타입) | 클라이언트가 암호를 사용하여 엑세스 토큰에 대한 사용자의 자격 증명을 교환하는 방식 |
Client Credentials Grant Type(클라이언트 자격 증명 타입) | 클라이언트가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식 |
서버사이드 코드로 인증하는 방식
권한서버가 클라이언트와 리소스서버간의 중재역할.
Access Token을 바로 클라이언트로 전달하지 않아 잠재적 유출을 방지.
SPA(Single page Application) 이나 모바일 어플리케이션에서 이 방식을 사용하면 된다.
OAuth 2.0에서 가장 많이 사용되는 방식이다.
권한코드 없이 바로 발급되서 보안에 취약
주로 Read only인 서비스에 사용.
Client에 아이디/패스워드를 저장해 놓고 아이디/패스워드로 직접 access token을 받아오는 방식이다.
Client 를 믿을 수 없을 때에는 사용하기에 위험하기 때문에 API 서비스의 공식 어플리케이션이나 믿을 수 있는 Client에 한해서만 사용하는 것을 추천한다.