이 글은 생활코딩 WEB2 - OAuth 2.0를 보고 공부한 내용을 정리하는 용도로 작성되었습니다.
- 내 앱 > 앱 만들기 > facebook 로그인 > web > 제품 > Facebook 로그인 > 설정 > URI 리디렉션 유횩성 검사기에 주소를 입력하고 저장한 뒤 설정으로 오면 App ID와 App Secret을 확인할 수 있다.
- google cloud platform에서도 비슷하게 등록할 수 있다.
https://resource.server/?client_id=1&scope=B,C&redirect_uri=https://client/callback
과 같은 주소로 이동)Location: https://client/callback?code=3
이라는 주소로 이동하라고 헤더에 포함해서 전달authorization code:3
이라는 정보를 획득한다. https://resource.server/token?grant_type=authorization_code&code=3&redirect_uri=https://client/callback&client_id=1&client_secret=2
로 접속(authorization code와 secret 정보를 전송)GET https://www.googleapis.com/drive/v2/files?access_token=access_token
GET /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token
아래 명령어를 실행하면 Bearer 인증 방법으로 access token이 헤더에 담겨 전송된다.
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
만약 아래와 같은 포스트 요청을 보내고 사용자가 애플리케이션에 부여된 권한을 철회하지 않았다면
POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token
토큰 서버는 새로운 access token 값을 지닌 json 데이터를 반환해준다.
{
"access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in": 3920,
"scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
"token_type": "Bearer"
}
(A) The client requests an access token by authenticating with the
authorization server and presenting an authorization grant.
(B) The authorization server authenticates the client and validates
the authorization grant, and if valid, issues an access token
and a refresh token.
(C) The client makes a protected resource request to the resource
server by presenting the access token.
(D) The resource server validates the access token, and if valid,
serves the request.
(E) Steps (C) and (D) repeat until the access token expires. If the
client knows the access token expired, it skips to step (G);
otherwise, it makes another protected resource request.
(F) Since the access token is invalid, the resource server returns
an invalid token error.
Source