Skip to content

Github OAuth

박재윤 edited this page Dec 19, 2020 · 2 revisions

github OAuth

적용 절차

  1. 어플리케이션 등록
  2. 깃허브 사이트로 리다이렉트, 로그인
  3. 로그인을 하면 1에서 정한 url로 리다이렉트
  4. url에 파라미터로 온 code 값을 가지고 access token을 받아오는 요청을 보낸다.
  5. 받아온 access token을 가지고 사용자 정보를 받아오는 요청을 보낸다.
  6. 사용자 정보가 디비에 있는지 확인한다.
  7. 사용자 정보로 우리 서버의 토큰을 만든다.

어플리케이션 등록

깃허브 사이트의 setting - developer setting에서 어플리케이션을 등록할 수 있다. 이 때 authorization callback url에 사용자가 깃허브에서 로그인을 한 후에 리다이렉트가 될 주소를 넣는다.

어플리케이션을 등록한 후 client_idclient_secret을 기억해야한다.

깃허브 사이트로 리다이렉트

깃허브 사이트로 client_id 값을 parameter로 넣어서 리다이렉트 시킨다. client_id는 깃허브에서 여러 어플리케이션들 중 앞에서 우리가 등록한 어플리케이션을 구별하기 위해서 쓰인다.

이 과정에서 로그인을 하는 사용자는 깃허브에게 정보를 우리가 등록한 어플리케이션에 줘도 된다는 승인을 하는 것이다.

authorization callback url로 리다이렉트

사용자가 인증을 하면 어플리케이션 등록을 할 때 callback url로 지정한 url로 리다이렉트 된다. 이 때 url 내에 code 값이 파라미터로 함께 온다.

http://localhost:8080/auth/github?code=92e0b966198bbb435914

access token을 받아오는 요청

앞에서 받아온 code와 어플리케이션을 등록하고 받은 client_id, client_secret을 가지고 access token을 받아오는 요청을 보낸다. 이 때 프론트엔드에서 cors 오류가 났고, 이 문제를 해결하기 위해서 code 값을 백엔드로 보낸 후에 백엔드에서 깃허브로 요청을 보내기로 했다.

POST https://github.com/login/oauth/access_token

parameter
1. client_id
2. client_secret
3. code

바로 access token을 주지 않은 이유?

바로 access token을 주면 access token이 웹브라우저와 통신을 하는 과정에서 공격자가 가로챌 수 있게 된다. 반면 code를 주고 code, client_id, client_secret과 함께 access token을 받아오는 요청을 보내야하면, 한 번 더 보호를 받을 수 있고 access token을 백엔드 상에서 주고 받기 때문에 더 안전하다.

사용자 정보 요청

access_token을 가지고 사용자 정보를 요청한다.

GET https://api.github.com/user

headers : {
    Authorization:'BEARER (access token)'
}

사용자 정보가 DB에 있는지 확인

사용자 정보가 DB에 없다면 넣어준다.

토큰을 만든다.

우리의 서버에서 인증

우리의 서버에서 인증을 하기 위해서 위에서 만든 토큰을 이용한다.

Clone this wiki locally