본 글은 생활코딩 OAuth를 보고 학습을 위해서 정리한 글입니다.
지금은 봐도 모르겠다. 하지만 이 글을 다 읽으면 이해가 되겠지???
Resource Server (github)
Client (내 페이지)
Resource Owner (사용자)
사실 Resource Server는 아래의 2개가 다르게 있지만 위의 3개로 설명한다고 하셨다.
어떤 것인지만 알고 넘어가자
Resource Server
데이터를 갖고 있는 서버
Authorization Server
인증과 관련된 처리를 전담하는 서버
각 Resource Server 마다 다르다. 아래의 3가지를 대표적으로 생각하면 될듯
아래의 3가지 핵심정보를 client, resource server이 알게 하는 것
Client ID
Client Secret (누출 x)
Authorized redirect URIs ex)http://client/callback
authorized code를 전달해 줄 때 위 주소로 알려주세요 라고 말하는 것
Resource Owner는 client에 접근해서 Resource Server를 사
<https://resource.server/>
?client_id=1
&scope=B,C
&redirect_uri=https://client/callback
//예시
<https://github.com/login/oauth/authorize>
?client_id=619d8e37e985e7ab3be6
&scope=user //(각 resource server가 정해놨다.)
&redirect_uri=http://3.37.76.224 || <http://localhost:3000>
Resource Owner 가 위의 URI로 접근을 한다.
Resource Server는 Resource Owner의 로그인 여부를 판단한다.
⇒ 로그인 성공
Resource Server는 2가지를 체크한다.
Resource Server는 ~~한 권한이 맞는지 물어본다.
Resource Owner는 권한을 허용한다.
Resource Server는 아래와 같은 정보를 ClientID 아래 저장한다.
위의 과정에서 Resource Owner가 승인을 해줬으면 바로 Client에게 권한을 주지는 않는다. why? 위험하다.
Resource Server는 Resource Owner에게 authorization code를 아래와 같이 넘겨준다. ex) Location : https://client/callback?code=3123123
여기서 프론트엔드 개발자는 redirect된 저 URI에서 authorization code를 얻어서 서버에 다시 보내주는 역할을 하는 것
<https://resource.server/token>
?grant_type=authorization_code
&code=3123123
&redirect_uri=https://client/callback
&client_id=1
&client_secret=2
드디어 Access Token을 받을 수 있게 됐다.
드디어 OAuth의 목적인 액세스 토큰을 받을 수 있게 됐다.
각 Resource Server에서 주어진 API를 활용할 수 있게 됐는데 이때 갖고 있는 Access Token을 같이 보내줘야된다.
Client가 Resource Server에 Access Token을 전달하는 것에는 2가지 방법이 있다.
쿼리로 받기 https://...?**access_token="token"** (일단 구글은 되는데 다른데는 모름)
헤더의 Authorization: Bearer "token" (표준 방법)
여기서 Bearer는??
OAuth를 위해 나온 인증방법이라고 한다. (token_type 이라고 생각하면 될 듯)
헤더로 주고 받는 방식이 안전하다고 한다. 그래서 우리는 헤더로 보냈었나보다.
각각의 Access Token은 수명이 있다.
이때 보관하고 있었던 Refresh Token을 이용해서 Access Token을 다시 받는다.
Resource Server마다 Refresh Token을 주는게 다르고 매번 갱신되거나 이런 것도 다 다르다고 한다. 각 사이트에서 확인해봐야될듯!
핵심은 Access Token의 유효기간이 끝나서 API 사용시 에러가 발생되면 다시 Refresh Token을 이용해서 Access Token을 받아와야 한다.
다시 보면 조금은 이해가 된다.