보안된 리소스에 액세스 하기 위해서 클라이언트에게 권한을 제공하는 프로세스를 단순화 하는 프로토콜을 말한다.
소셜 로그인이 되어있는 사이트에서 소셜 로그인으로 접속을 한다고 생각을 해보자
그럼 사용자는 facebook에 연결을 할떄 어떤 권한을 허용할 것인지를 선택할 수 있고 그후 facebook에서 사이트에 엑세스 토큰을 보내주게 된다.
이후 웹에서 받은 액세스 토큰을 이용하여 페이스북에 요청을 하게 되고 페이스북은 웹 서버에 정보를 전달하게 된다
Resource Owner : 액세스 중인 리소스 유저
- 사용자
Client : Resource Owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램
- 앱
Resource server : Client의 요청을 수락하고 응답할 수 있는 서버
- facebook
Authorization server : Resource server가 액세스 토큰을 발급하는 서버
- facebook
Authorization grant : 클라이언트가 엑세스 토큰을 얻을떄 사용하는 자격 증명
Authorization code : access token을 발급받기 전에 필요한 code
- 클라이언트 Id, 클라이언트 Secret
Access token : 보호된 리소스에 액세스하는 데 사용되는 credentials(자격)
- 권한을 나타내는 문자열 타입
Scope : 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스 범위
Authorization Code Grant type
- 액세스 토큰을 받아오기 위해 먼저 Authorization code를 받아 액세스 토큰과 교환하는 방법
- 가장 일반적으로 사용되는 유형이다.
- 그냥 토큰만을 받게되면 보안성이 떨어지기 떄문에 보안성을 위해서 사용한다.
> 사용자가 인증 권한을 수락을 하게되면 바로 웹에 토큰을 주는 것이 아니라 코드를 준다.
> 이후 웹에서 바로 코드를 다시 facebook에 전송을 하고 토큰을 받아오게 된다.
> 이후 토큰을 통해서 서버에 접속을 하는 것이다.
Refresh Token Grant Type
- 액세스 토큰 또한 일정 시간이 지나면 만료가 된다(자동 로그아웃)
- 그렇게되면 다시 소셜 로그인 해야하기 떄문에 그 과정을 넘기기 위해 사용하는 방법이다.
- Access token보다 Refresh Token의 사용기간이 좀더 길기 떄문에 가능한 방법
- 서버의 서비스마다 다르기 떄문에 서버를 뜯어봐야 알수가 있다.
> 기존에 로그인했던 사용자가 다시 소셜 로그인 요청을 하게 되면
> 액세스 토큰이 만료가 되었다는걸 인지하고 facebook에 새 토큰을 요청하고 새로운 토큰을 받아서 활용한다.