1. OAuth 란?
OAuth 는 인증을 중개해주는 매커니즘으로, 보안된 리소스에 액세스하기 위해서 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜이다. 소셜 로그인 인증 방식은 OAuth 2.0 을 바탕으로 구현된다.
즉, 이미 사용자 정보를 가지고 가지고 있는 웹 서비스(Naver, Kakao, Google 등)에서 사용자의 인증을 대신해주고, 접근 권한에 대한 토큰을 발급한 후 이를 이용해 서버에서 인증이 가능해진다.
다만 사용자 정보는 여전히 서버에 저장되고, 인증을 다른 서비스에 맡길 뿐 접근권한 관리는 서버의 몫이다.
2. OAuth 의 장점
- 유저 입장에서는 서비스 가입 속도가 빠르고 각각의 ID 와 비밀번호를 일일히 기억하지 않아도 된다.
- 서비스를 구현하는 개발자 입장에서도 신규 회원가입이나 회원 관리를 신경쓰지 않아도 된다.
- 또한 검증되지 않은 앱에서 OAuth를 사용해서 로그인 한다면 유저의 민감한 정보가 직접 앱에 노출될 일이 없고, 인증 권한에 대한 허가를 미리 유저에게 구해야 하기 때문에 보안상으로도 이점이 있다.
3. OAuth 작동 메커니즘
3-1. OAuth 의 주체
1. 사용자(Resouece Owner)
- 사용자 이름, 전화번호 등의 정보(Resource)의 주인.
2. Resource Server & Authorization Server
- Resource Server : 사용자가 소셜 로그인을 하기 위해서 사용하는, 이미 사용 중인 서비스(Naver, Kakao, Google 등)의 서버 중 사용자의 정보를 저장하고 있는 서버
- Authorization Server : 권한 서버. 인증/인가를 수행하는 서버로 클라이언트의 접근 자격을 확인하고 Access Token을 발급하여 권한을 부여하는 역할
3. 새로운 서비스(Application/Client)
- 사용자가 소셜 로그인을 활용해 이용하고자하는 새로운 서비스. 보호된 리소스를 사용하려고 접근요청을 하는 Client.
3-2. OAuth 인증 방식의 종류와 흐름
1. Implicit Grant Type
- 암묵적 승인 방식.
자격증명을 안전하게 저장하기 힘든 클라이언트(ex: JavaScript등의 스크립트 언어를 사용한 브라우저)에게 최적화된 방식
권한부여 승인 코드가 없이 바로 URL을 통해(redirect_url) Access Token 이 발급된다.
Refresh Token 이 사용 불가능하다.
Access Token을 획득하기 위한 절차가 간소화되기에 응답성과 효율성은 높아지지만 Access Token이 URL로 전달된다는 단점이 있다.
흐름도
2. Authorization Code Grant Type
- 권한 부여 승인을 위해 Authorization Sever(권한 서버)에서 자체 생성한 Authorization Code(권한 부여 승인 코드)를 전달하여 인증하는 방식으로, 가장 많이 쓰이는 방식이다.
간편 로그인 기능에서 사용되는 방식으로 클라이언트가 사용자를 대신하여 특정 자원에 접근을 요청할 때 사용된다.
보통 타사의 클라이언트에게 보호된 자원을 제공하기 위한 인증에 사용되며, Refresh Token의 사용이 가능한 방식이다.
흐름도
- 권한 서버는 Application 에서 유효한 인증 요청을 받을 경우 Authorization Code를 발급하여 전달한다.
- Application 은 redirect_url 을 통해 받아온 Authorization Code를 다시 권한 서버로 전달한다.
- 권한 서버가 유효한 Authorization Code인지 확인하면 Application 에 액세스 토큰을 발급하여 전달한다.
- Application은 권한 서버에서 발급받은 액세스 토큰을 리소스 서버로 보내서 사용자의 정보를 요청하고,
- 리소스 서버가 액세스 토큰이 유효한지 확인하면 요청받은 사용자의 정보를 Application 으로 전달한다.
참고 사이트 :
What is the OAuth 2.0 Authorization Code Grant? (developer.okta.com)
OAuth 2.0 동작 방식의 이해
[출처] OAuth 2.0 동작 방식의 이해|작성자 MDS인텔리전스
3. Refresh Token Grant Type
- 자원 소유자 자격증명 승인 방식
Application이 권한 서버로 리프레시 토큰을 보내주면, 권한 서버는 리프레시 토큰을 검증한 다음 액세스 토큰을 다시 발급해준다.
Application은 다시 발급 받은 액세스 토큰을 사용해서 리소스 서버에서 사용자의 정보를 받아온다.
흐름도
4. OAuth 의 장점
- 쉽고 안전하게 새로운 서비스를 이용할 수 있음
- 사용자가 신규가입하기 쉬움
- 정보를 해당 서비스에 직접 노출하는 것이 아니기 때문에 직접 가입하는 것보다 안전함
- Application의 입장에서도 회원의 정보를 직접 가지고 있음으로 인해서 발생할 수 있는 회원 정보 유출의 위험성에서 부담을 덜 수 있음
- 정보의 권한 영역을 설정할 수 있음
- OAuth 인증을 허가한다고 해서 새로운 서비스가 사용중이던 서비스의 모든 정보에 접근이 가능한 것은 아니며, 사용자는 원하는 정보에만 접근을 허락할 수 있어 보다 더 안전함.(필수 제공 항목, 추가 제공 항목 등에 체크 가능)
- OAuth 설정 페이지에서는 Application에서 필요한 정보를 선택가능하며, 사용자는 이 중 원하는 정보만 선택적으로 제공할 수 있다.