-
Notifications
You must be signed in to change notification settings - Fork 6
Github OAuth
- 어플리케이션 등록
- 깃허브 사이트로 리다이렉트, 로그인
- 로그인을 하면 1에서 정한 url로 리다이렉트
- url에 파라미터로 온 code 값을 가지고 access token을 받아오는 요청을 보낸다.
- 받아온 access token을 가지고 사용자 정보를 받아오는 요청을 보낸다.
- 사용자 정보가 디비에 있는지 확인한다.
- 사용자 정보로 우리 서버의 토큰을 만든다.
깃허브 사이트의 setting - developer setting에서 어플리케이션을 등록할 수 있다.
이 때 authorization callback url
에 사용자가 깃허브에서 로그인을 한 후에 리다이렉트가 될 주소를 넣는다.
어플리케이션을 등록한 후 client_id
와 client_secret
을 기억해야한다.
깃허브 사이트로 client_id 값을 parameter로 넣어서 리다이렉트 시킨다. client_id는 깃허브에서 여러 어플리케이션들 중 앞에서 우리가 등록한 어플리케이션을 구별하기 위해서 쓰인다.
이 과정에서 로그인을 하는 사용자는 깃허브에게 정보를 우리가 등록한 어플리케이션에 줘도 된다는 승인을 하는 것이다.
사용자가 인증을 하면 어플리케이션 등록을 할 때 callback url
로 지정한 url로 리다이렉트 된다. 이 때 url 내에 code 값이 파라미터로 함께 온다.
http://localhost:8080/auth/github?code=92e0b966198bbb435914
앞에서 받아온 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에 없다면 넣어준다.
우리의 서버에서 인증을 하기 위해서 위에서 만든 토큰을 이용한다.