Flutter에서는 Firebase를 이용하여 접했던 기억이 있어서 한번 알아보고 싶다는 생각을 가졌다.
정의
OAuth 2.0 승인 프레임워크를 사용하면 타사 애플리케이션이 리소스 소유자 및 HTTP 서비스간의 승인 상호작용을 조정하여 리소스 소유자 대신 액세스하거나 타사 애플리케이션이 자체적으로 액세스 하도록 허용하여 HTTP 서비스에 제한적으로 액세스하도록 할 수 있습니다.
OAuth 2.0 흐름

구성 요소
- Client : 앱, 앱은 리소스 소유자를 대신하여 보호된 애셋에 대해 리소스 서버에 요청을 보냄
- Resource Owner : 보호 대상 리소스에 대한 액세스 권한을 부여할 수 있는 사람
- Resource Server : Facebook, Google, Twitter와 같은 서비스, 리소스 서버는 보호된 리소스를 앱에 제공하기 전에 일종의 승인을 요구
- Authorization Server : 승인 서버는 OAuth2.0 사양을 준수하여 구현, 리소스 서버에 사용자 데이터에 액세스 할 수 있는 권한을 앱에 부여하는 액세스 토큰발급을 담당
- 승인 부여 : 최종 사용자를 대신하여 액세스 토큰을 검색할 수 있는 권한을 앱에 부여
- 액세스 토큰 : 보호된 리소스에 액세스하는데 사용자 인증 정보 역할을 하는 긴 문자열
- 보호된 리소스 : 리소스 소유자가 소유한 데이터
흐름
- 클라이언트가 resource ownerdprp 인증 요청을 보내면, resource owner가 클라이언트에게 권한을 부여
- 클라이언트가 부여받은 권한을 통해 Authorization server에 요청하면 Access Token을 반환
- 클라이언트가 발급받은 Access Token을 통해 이용하려는 서비스에게 리소스 요청
- 서비스에서 토큰 확인 후 관련 리소스 반환
OAuth 2.0 Grant 유형
OAuth 2.0 에서 "grant type" 이라는 용어는 애플리케이션이 액세스 토큰을 얻는 방식
인증 코드 - Authorization Code
사용자가 리디렉션 URL을 통해 클라이언트로 돌아오면 애플리케이션은 URL에서 인증 코드를 가져와 액세스 토큰을 요청하는데 사용
OAuth2.0 부여 유형 중 가장 일반적