생활코딩 님과 함께 OAuth 2.0의 세계로 출발해 볼까요?
https://www.youtube.com/playlist?list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q-
프로젝트를 진행하면서 OAuth 2.0 기반의 소셜 로그인 기능을 사용했지만 과연 어떻게 사용이 되고 왜 사용되는지 조금 더 자세히 알아보기 위해 공부를 진행합니다.
왜 OAuth 2.0을 사용하는가?
제가 만든 서버를 통해서 사용자가 구글, 페북, 트위터를 직접적으로 사용한다고 생각을 하면 client는 제가 만든 데이터 베이스에 소셜 미디어의 로그인 아이디와 비밀번호를 전달해야합니다. 이렇게 되면 제가 만든 데이터 베이스에 개인정보를 저장하게 되는 꼴이고 보안이라고는 하나도 찾아볼 수 없는 경우가 되버립니다.
이것을 방지하기 위해 소셜 미디어 서버에서 accessToken을 전달해주고 이 토큰을 이용해서 우리가 사용할 수 있는 필수적인 기능만을 사용 가능하게 합니다. 이렇게 보안 및 개인정보 유출의 취약성을 보완해주기 위해 사용됩니다.
역할
이름 | 설명 |
Resource Owner | 리소스 소유자입니다. 본인의 정보에 접근할 수 있는 자격을 승인하는 주체입니다. 예시로 구글 로그인을 할 사용자를 말합니다. Resource Owner는 클라이언트를 인증(Authorize)하는 역할을 수행하고, 인증이 완료되면 동의를 통해 권한 획득 자격(Authorization Grant)을 클라이언트에게 부여합니다. |
Client | Resource Owner의 리소스를 사용하고자 접근 요청을 하는 어플리케이션 입니다. |
Resource Server | Resource Owner의 정보가 저장되어 있는 서버입니다. |
Authorization Server | 권한 서버입니다. 인증/인가를 수행하는 서버로 클라이언트의 접근 자격을 확인하고 Access Token을 발급하여 권한을 부여하는 역할을 수행합니다. |
등록(Register)
client ID 와 Client Secret, Redirect URI를 공통인자로 받습니다.
client ID : 우리가 만들고 있는 API의 식별자 (외부 노출 가능)
client Secret : client ID에 대한 비밀번호 (외부 노출X)
Authorized redirect URI : authorize 코드를 전달 받을 redirect URI
저는 카카오 api를 이용해서 저것들의 실체를 보았습니다.
카카오 로그인 api 를 사용하기 위해서 내 어플리케이션을 만들면
이런식으로 여러가지 키를 주고 왼쪽에 카카오 로그인이라는 메뉴를 클릭하면 redirect URI를 등록할 수 있습니다. 직접 해보셔야 압니다!
공식 문서를 잘 읽어보면서 생활코딩의 내용을 이해하면 좋습니다. 저희가 다른 서비스에서 카카오 로그인을 처음하게 되면 사용자의 닉네임 및 생일, 성별 등의 개인정보를 client에게 주겠냐고 물어보는 페이지가 나오게 되죠? 그것을 동의하게 되면 인가 코드를 받고, 그 승인 코드로 승인 토큰을 받게 되고 그 토큰으로 개인정보를 받아와서 client 가 서비스 세션을 주는 과정을 거칩니다.
그림과 영상, 글 모두 확인해서 직접 사용해 보는 것이 가장~~~ 이해가 잘됩니다. 이거 하는데만 몇일이 걸렸는지 참 부끄럽습니다. 하지만 지금은 사용은 할 줄 안다? 정도 입니다. ㅎㅎ
기회가 되면 직접 하는 것을 정리해볼게요.
추가내용
Refresh Token 사용 이유
Access Token(JWT)를 통한 인증 방식의 문제는 제 3자에게 탈취당할 경우 보안에 취약하다는 점입니다. 그렇다고 Access Token의 만료기간을 엄청나게 짧게 한다면 로그인을 자주 해서 새롭게 Token을 발급받아야 하므로 불편합니다.
그래서 사용되는 것이 refresh token 인데, refresh token 을 인증 서버에서 받아서 Access Token이 만료되면 Refresh Token 을 인증서버로 보내 새로운 Access Token을 받고, 그 Token을 resource 서버로 보내주는 방식을 사용한다고 합니다. 그림을 보시면 더욱 쉽게 이해하실 수 있습니다.
근데 저는 그런 의문이 듭니다. Refresh Token을 탈취당하면 어떻게 되나요? 왜 더 보안이 강해지는 것인지는 잘 모르겠어서요. Refresh Token의 사용량을 1번으로 하는 방법도 있다는데 그냥 Access Token 자체의 기간을 짧게 하던지 한번만 사용하게 하는 것이랑 무엇이 다른지 정말 모르겠습니다.
이 의문을 아시는 분은 댓글을 달아주세요.
출처
https://tansfil.tistory.com/59
https://charming-kyu.tistory.com/36
https://www.youtube.com/playlist?list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q-
'코딩 개발' 카테고리의 다른 글
왜 나는 개발자가 되고 싶을까? 어떤 개발자가 되고 싶은가 (1) | 2023.01.28 |
---|---|
코딩테스트 - 개인정보 수집 유효기간 (0) | 2023.01.24 |
코딩테스트 - 햄버거 만들기(알고리즘 이해) (2) | 2023.01.18 |
코딩테스트 - 숫자 짝꿍 (0) | 2023.01.17 |
HTTP (0) | 2023.01.08 |