본문 바로가기

패스트캠퍼스/100% 환급 챌린지_2

패스트캠퍼스 환급챌린지 48일차 : Netplix 구독형 멤버십 프로젝트로 배우는 Spring Security 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

안녕하세요 :)

오늘은 챌린지 48일차로, 벌써 토요일이 지나가고 일요일이 왔네요.

 

오늘 배울 내용은,

Part C. OAuth2.0 과 JWT

Ch 1. OAuth 2.0 이 동작하는 방법

"02. OAuth 2.0 을 구현하는 방법 " 입니다.


 

오늘은 OAuth 2 를 구현하는 방법에 대해 알아보았다. 애플리케이션에 맞게 OAuth 2.0 을 어떻게 적용할 수 있을까? OAuth 2.0 를 이용한다는 것은 권한 부여에 토큰을 이용한다는 것으로 토큰을 활용해서 특정 리소스에 접근할 수 있고, 토큰을 얻는 여러 방법이 존재하는데 이를 그랜트(grant) 라고 한다.

OAuth 2.0 그랜트는 승인코드와 암호가 있다. OAuth 2.0 의 구현을 하려면 그랜트를 선택해야 한다. 각 그랜트별 토큰이 생성되는 방식에 대한 이해가 필요하다.

 

승인 코드 그랜트 유형에 대한 비유를 들어주셨는데, 너무 이해가 잘 되었다. 예를 들어, 친구 A와 친구 B가 있고 서로 룸메이트이다. 친구 A가 집에 가는 길에 피자집에 들러 친구 B와 먹을 피자를 주문한다. 피자집에서는 30분 뒤에 찾으러 오라고 한다. 친구 A 는 피자를 주문한 뒤 집으로 갔고, 친구 B 에게 나중에 찾아 오라고 부탁한다. 친구 B는 시간에 맞춰 피자를 찾으러 간다. 피자집에서는 누군가 피자를 찾으러 왔는데 이 사람에게 피자를 줘도 되는지 친구 A에게 전화하여 확인한다. 친구 A가 확인을 해주면 피자집에서는 친구 B 에게 피자를 전해 준다. (피자: 리소스 / 친구 A: 사용자(리소스 소유자) / 친구 B: 클라이언트 / 피자집: 권한 부여 서버)

승인 코드 그랜트 유형 구현을 하기 위해서는 가장 많이 이용하는 OAuth 2.0 흐름 중 하나로 동작 방식과 이용 방법에 대해 이해할 필요가 있다.

사용자 → 클라이언트:애플리케이션(모바일 앱/웹 앱) → 권한 부여 서버 → 리소스 서버

——- 1. 인증 요청 ——-
* 사용자 : 클라이언트에 계정에 접근 희망
* 클라이언트 : 사용자에게 접근 부여 서버에게 클라이언트를 허용하도록 요청
* 사용자 : 권한 부여 서버에 클라이언트가 사용자 계정에 접근할 수 있도록 허용

——- 2. 액세스 토큰 요청 및 발급 ——-
* 권한 부여 서버 : 클라이언트에게 클라이언트가 계쩡에 접근할 수 있도록 사용자가 허용함
* 클라이언트 : 권한 부여 서버에 토큰 요청
* 권한 부여 서버 : 클라이언트에 토큰 발급

——- 3. 보호된 리소스 호출 ——-
* 클라이언트 : 리소스 서버에 사용자 계정에 접근 요청 w/토큰
* 리소스 서버 : 클라이언트에게 요청에 대한 리소스

OAuth 2.0 의 허점도 있다. OAuth 2.0 도 다른 소프트웨어의 개발 영역과 마찬가지로 절대적인 방법은 아니다. 따라서 취약점이 존재하고 이에 대한 이해가 필요하다. 먼저, 클라이언트에서 CSRF (사이트간 요청 위조) 이용될 수 있다. CSRF 보호 메커니즘을 적용하지 않으면 사용자가 로그인을 했을 때 CSRF 가 가능하게 된다. 그리고 클라이언트 자격 증명 도용할 수 있다. 보호되지 않은 자격 증명을 저장하거나 전송하면 이를 공격자가 도용할 수 있다. 마지막으로 토큰 재생과 토큰 하이재킹(hijacking)을 당할 수 있다. 네트워크 통신 중 토큰이 가로채질 수 있고, 인증 프로세스를 방해하고 리소스에 액세스하기 위해 토큰을 훔치는 과정을 의미한다.