OAuth2 인증

joonpark·2022년 1월 11일
0

42_cli

목록 보기
2/5

42 API 사용하기 위한 OAuth2 인증 구현.

문제

42 API를 사용하려면 OAuth2로 권한을 얻어야된다. 그래서 내 나름대로 access token을 얻어서 시도해봤지만 정상적으로 작동하지 않았다.
예를 들어 "https://api.intra.42.fr/v2/me&client_id=my_id&client_secret=my_secret" 을 GET 요청하면 나에 대한 정보를 얻어와야하는데 404 에러가 발생.

원인

  1. 일단 제일 큰 문제는 내가 OAuth2를 제대로 이해하지 못하고 code 없이 access_token을 얻으려고 한 것. -> 인가 서버는 유효한 access_token을 반환하지 않음.
  2. OAuth2 인증을 한 뒤 요청 파라미터 뒤에 code="some_code" 를 얻는데 이 code를 어떻게 다시 받아와서 access_token을 받아오는 걸 어떻게 구현할지 모름.

해결

1. OAuth2 이해하기

Oauth2는 Open Authorization2의 줄임말이다. 구글, 카카오 등에서 제공하는 인가 서버로 개인 정보를 인증하고 access token을 받는다. 이후에는 이 access_token으로 리소스를 요청할 수 있다.

리소는 소유자: 계정을 소유하는 사용자.
리소는 client: API를 이용하는 사용자. 42_cli 에서는 42_cli 프로그램.
인가 서버: 권한을 관리하는 서버. code, access token 발급.
리소스 서버: 리소스를 제공하는 서버. 인가를 위해 인가 서버와 통신하기도 한다.

2. rust로 OAuth2 인증하기.

cli 환경에서 OAuth2 인증을 한다는게 처음에는 이해가 안됐다. 그래서 비슷한걸 찾아보다가 github cli도 cli에서 인증을 하길래 저렇게 하면 되겠다 싶었다.
처음에 내가 못했던 건 GET 요청을 받아서 redirect url로 리다이렉트 될 때 뒤에 오는 param code="some_code"를 어떻게 42_cli 프로그램에서 획득하냐였다. 아래 사진에서 1번을 어떻게 할지 몰라서 바로 2번으로 넘어가는 짓을 해버림.

찾아보니까 이런 일련의 과정들을 처리해주는 oauth2 라는 crate 가 있어서 사용했다.

아래와 같은 과정을 거친다.

작동 모습


먼저 인증 전 현재 인증한 유저 수다. 0명인 걸 확인할 수 있다.


사진처럼 oauth2 인증을 위한 링크를 준다. 해당 링크로 접속

인증 화면이 나오고 Authorize를 클릭하면 인증이 된다.


인가서버에서 code를 받았다.

access_token까지 받은 후 사용자가 늘어난거 확인.

0개의 댓글