본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
안녕하세요 :)
오늘은 챌린지 51일차로, 모처럼 모닝 공부를 해보았습니다.
오늘 배울 내용은,
Part C. OAuth2.0 과 JWT
Ch 2. OAuth 2.0 구현
"03. 리소스 서버 구현 - 1" 입니다.

오늘은 리소스 서버에 대해 알아보았다. 리소스 서버는 사용자의 리소스를 관리하는 서버이다. 클라이언트에게 리소스에 대한 접근을 허용하려면 리소스 서버에 올바른 액세스 토큰이 필요하다. 또, 클라이언트는 권한 부여 서버에서 액세스 토큰을 얻고 이를 HTTP 요청 헤더에 추가해 리소스 서버의 리소스를 호출한다.
리소스 서버의 구현에 대해 살펴보면, 권한 부여 서버가 토큰을 발행하는 이유는 클라이언트가 사용자의 리소스에 접근하는 것을 허락하기 위한 것이다. 큰 흐름은 다음과 같다. 사용자는 클라이언트에 본인의 계정에 접근하고 싶다고 요청한다. 클라이언트는 권한 부여 서버로부터 받았던 액세스 토큰을 활용하여 리소스 서버를 호출한다. 리소스 서버는 권한 부여 서버와 통신하여 액세스 토큰의 유효성을 검증한다. 만약 토큰이 유효하면 사용자의 리소스 정보를 클라이언트에게 반환한다.
권한 부여 서버는 액세스 토큰을 얻기 위해 권한 부여 서버를 호출한다(권한 부여 서버로부터 얻은 액세스 토큰을 활용하여 사용자 리소스에 접근함).
리소스 서버는 리소스 버서는 사용자의 리소스를 보호한다. 클라이언트가 리소스의 서버의 엔드포인트를 호출하려면 올바른 액세스 토큰이 필요하다. 클라이언트가 토큰을 이용해 엔드포인트를 호출하면 리소스 서버는 권한 부여 서버가 발생한 토큰이 맞는지 검증한다.
리소스 서버를 구현할 할 때 중요한 것은 리소스 서버가 토큰을 검증하는 방법을 선택하는 것인데 여러 옵션이 존재하니 각 방법에 대해 알아보면 다음과 같다.
리소스 서버의 토큰 검증 (1)
리소스 서버가 직접 권한 부여 서버를 호출하여 발행한 토큰이 맞는지 검증하는 방법이다.
사용자 (리소스 소유자) -> 사용자는 클라이언트가 자신의 데이터를 관리할 수 있도록 허락하고자 함 -> 클라이언트 -> 권한 부여 서버로부터 액세스 토큰을 얻은 후 리소스 서버의 엔드포인트를 호출함 -> 리소스 서버 -> 클라이언트에게 받은 액세스 토큰을 검증하기 위해 리소스 서브는 권한 부여 서버를 호출함 -> 권한 부여 서버
리소스 서버의 토큰 검증 (2)
권한 부여 서버가 토큰을 저장할 때 공유된 데이터베이스를 사용한다.
사용자 (리소스 소유자) -> 사용자는 클라이언트가 자신의 데이터를 관리할 수 있도록 허락하고자 함 -> 클라이언트 -> 권한 부여 서버로부터 액세스 토큰을 얻은 후 리소스 서버의 엔드포인트를 호출함 -> 리소스 서버 -> 리소스 서버는 권한 부여 서버가 토큰을 저장하는 데이터베이스에 액세스 할 수 있음 -> 권한 부여 서버는 액세스 토큰을 발행할 때 토큰을 데이터베이스에도 저장함 -> 권한 부여 서버
리소스 서버의 토큰 검증 (3)
암호화 서명을 이용하는 방법으로 권한 부여 서버는 토큰을 발행할 때 토큰에 서명을 하고, 리소스 서버는 이 서명이 맞는지 검증한다. 주로 JSON WEB TOKEN (JWT)를 활용한다.
사용자 (리소스 소유자) -> 사용자는 클라이언트가 자신의 데이터를 관리할 수 있도록 허락하고자 함 -> 클라이언트
-> 권한 부여 서버 -> 권한 부여 서버는 액세스 토큰을 발행할 때 비밀 키를 이용해 토큰에 서명함
-> 리소스 서버 -> 리소스 서버는 토큰을 검증하기 위해 토큰 서명을 확인함