-
Notifications
You must be signed in to change notification settings - Fork 5
OAuth2.0
Yancy edited this page Dec 19, 2020
·
1 revision
- 다른 서비스의 회원 정보를
안전하게 사용하기 위한 방법이다. - 고객이 자신의 다른 서비스(네이버, GitHub 등)의
아이디/비밀번호를 우리 서비스에 알려주지 않아도, 다른 서비스(네이버, GitHub 등)에 있는 고객의 정보를우리 서비스에서 안전하게 사용하기 위한 방법이다. - 즉, 다른 서비스로부터
AccessToken을 얻어내는 기술이다.- 이렇게 얻은
AccessToken을 이용해 해당 서비스의 일부 기능을 이용할 수 있는 것이 OAuth 서비스의 핵심
- 이렇게 얻은
- 사용자들은 새로운 서비스를 이용할 때마다, 회원가입을 진행하는 일이 번거롭다고 느낀다. (귀찮다고 느끼는 사용자가 많다.)
- 처음 보는 서비스에 대해 신뢰성을 갖기 어렵다.
- 다른 서비스(네이버, GitHub 등)의
Client ID: public key 이다. 공개해도 된다. -
Client Secrets: secret key이다. 공개하면 안 된다. 우리는.env에서 관리한다. -
Redirect URL: Client ID와 Client Secret을 확인한 후 redirect할 url 주소이다.
- 각 인증을 요청할 다른 서비스(네이버, GitHub 등)에
어플리케이션을 등록하면 된다. - ex)
GitHub의 경우는Settings -> Developer settings -> OAuth Apps을 등록하면 된다. 여기서 Homepage URL, Authorization callback URL(Redirect URL), Client ID, Client Secrets 등을 등록 & 확인할 수 있다.

- 사용자가 ID, PW를 입력하면, 어플리케이션 등록 시 적었던
callback url로 지정한url로 리다이렉트 된다. - 이 때 url 내에 code 값이 파라미터로 함께 온다.
http://118.67.129.125:8080/?code=[:code]
-
2번에서 받은 code 값을 backend로 전달한다.
- 깃허브 로그인:
http://118.67.129.125:3000/user/githublogin - 네이버 로그인:
http://118.67.129.125:3000/user/naverlogin - 카카오 로그인:
http://118.67.129.125:3000/user/kakaologin
- 깃허브 로그인:
-
client_id,client_secret,code값을OAuth Authorize Server에 access token을 요청한다. (POST요청)- OAuth Token Authorize Server는 세 가지 정보가 모두 일치하는지 확인한다.
- 모두 일치하면
Access Token을 발급한다.
- 발급 받은
Access Token을 통해,Resource Server에 사용자 정보를 요청한다. (GET요청)- Access Token은 Header에 담아 전송한다.
ex) https://api.github.com/user headers : { Authorization:'BEARER (access token)' }
- 사용자 정보가 우리 DB에 있는지 확인하여, 없으면 user 정보를 DB에 저장한다.
- User 정보를 응답 받으면,
User ID로, JWT token을 생성한다. -
JWTtoken을 frontend로 전달한다.
- 보안적 이슈 & 고려했던 점
- JWT token 탈취
- JWT token에 저장되어있는 정보
- userId만 저장되어있다.
-
JWTtoken 길이 자체가 길어서, 악의적으로 서로 주고 받는 거 아닌 이상 탈취 자체가 조금 어려움 - 탈취 당한 경우, token 안에 들어있는 정보 자체는 userId만 있기 때문에 크리티컬한 정보가 없다.
- userId를 알더라도, MongoDB에 접근할 수 있는 IP를 IP를 일부로 한정해두어, 실제 User 정보를 얻지 못하도록 방어한다.