이번에 생활코딩에서 OAuth2.0 이란 강의를 듣고 OAuth2.0에 대한 개념을 정리해 보았다.
앞으로 구글, 네이버, 카카오의 소셜로그인을 구현하는 것이 목표이기 때문에 그전에 개념을 한번 살펴보고 싶어서 공부하게 되었다.
용어 설명
- Resource Server : User의 정보를 가지고 있는 서버이다. 구글, 네이버, 카카오 같은 곳이라 생각하면 될 것 같다.
- Resource Owner : 구글, 네이버, 카카오 같은 곳에 회원가입이 되어 있는 유저이다. 우리 앱을 사용할 유저라 생각하면 될 것 같다.
- Client : 우리의 서비스이다.
등록 절차
client가 Resource Server를 이용하기 위해서는 Resource Server에 대한 Register를 받아 놔야 한다.
이때 3개의 값을 공통적으로 받는다.
- Client Id : 우리가 만들고 있는 서비스의 식별자이다.
- Client Secret : 식별자에대한 비밀번호이다. (외부에 노출 되면 안된다)
- Authorized redirext URls : Resource Server가 권한을 Client에게 줄 때, Authorization code를 전달할 때 사용하는 URL이다.
구글은 Cloud Platform에서 만든다.
Resource Owner의 승인
등록을 하게 되면 Resource Server와 Client는 Client ID, Client Secret, redirect URL를 알게 된다.
Resource Owner가 Client에게 다른 소셜에서 할 수 있는 일을 요구할 때, Client는 Resource Owner에게 소셜 로그인 아이콘을 보여준다.
그 아이콘 링크를 살펴보면 https://resource_server/?client_id=1&scope=B,C&redirect_uri=https://client/callback 이런식으로 되어 있다. 여기서 scope은 Resource Server가 하는 일이다.
- Resource Server가 Resource Owner에게 저 URl로 정보를 보내면 Resource Server는 로그인이 된지 체크를 하고 로그인이 안되어 있으면 로그인 페이지를 Resource Owner에게 보내준다.
- Resource Owner가 로그인을 하면 Resource Server는 client_id 값과 같은 client_id 값이 자신의 서버에 있는지 검사하고 있으면 redirect_url을 검사한다. (다르면 실패 ㅜㅜ)
- 같다면 Scope의 권한들을 Client에게 허용할 것인지 Resource Owner에게 보내준다.
Resource Server의 승인
Resource Owner에 대한 승인을 위에서 흭득했다. 이제 Resource Server가 승인을 해줘야 한다.
Resource Server가 승인을 하기위해 accessToken을 바로 발급하지 않고 임시 비밀번호를 발급한다.
임시 비밀번호는 authorization code 라고 한다. 그리고 이 authorization code를 Resource owner에게 전송한다.
바로 Location : https://client/callback?code=3 이런 식이다.
이것을 받은 Resource Owner의 웹 브라우저는 Client의 https://client/callback?code=3으로 이동을 한다.
이렇게 하면 Client는 Resource owner의 authorization code를 알게 된다.
그 후 Client가 직접 Resource Server에 접속하게 된다.
https://resource.server/token?grant_type=authorization_code&code=3&redirect_url=https://client/callback&client_id=1&client_secret=2 바로 이런 URL로 접속하게 된다. 즉, Reosurce Server에 접속한다.
이제 Resource Server는 자신이 받은 정보와 자신이 가진 정보가 일치하는지 검사한다!!
Access Token 발급
- 위에서 정보를 받은 Resource Server는 authorization code를 지워 버린다.
- 그 후 Resource Server는 Access Token을 발급한다.
- 그 후 Client에게 보내준다!!
Refresh Token
Access Token은 수명이 존재한다. 이렇게 수명이 다 될 경우 손 쉽게 access token을 발급 발 수 있는게 Refresh Token이다.
client id와 client secret, refresh token을 전송하면 새롭게 access token을 발급해 준다.
정리
'토이프로젝트 > 나만의 프로젝트' 카테고리의 다른 글
Docker로 CI/CD 구축하기 (0) | 2023.06.20 |
---|---|
데이터베이스 정규화 하기 (2) | 2023.04.29 |
SpringBoot를 이용한 이메일 인증 하기 (0) | 2023.02.06 |
Spring Boot와 JWT를 이용한 회원 가입(2) (0) | 2023.02.05 |
Spring Boot와 JWT를 이용한 회원 가입(1) (0) | 2023.02.05 |