Top

OAuth 2.0 쿡북 [Spring Security를 이용한 OAuth 애플리케이션 개발]

  • 원서명OAuth 2.0 Cookbook: Protect your web applications using Spring Security (ISBN 9781788295963)
  • 지은이아돌포 엘로이 나시멘토(Adolfo Eloy Nascimento)
  • 옮긴이윤우빈
  • ISBN : 9791161752211
  • 40,000원
  • 2018년 10월 31일 펴냄
  • 페이퍼백 | 524쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 해킹과 보안

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약

Spring Security를 이용해 실질적으로 OAuth 2.0 애플리케이션을 구현하는 데 초점 맞추고 있다. 기본적인 형태의 OAuth 2.0 애플리케이션 구현뿐만 아니라 동적 클라이언트 등록, 토큰 인트로스펙션, PKCE, JWT 액세스 토큰, OpenID Connect와 같은 다양하고 확장된 주제에 대해 구체적인 구현 가이드를 제시한다.

이 책에서 다루는 내용

■ 발급된 액세스 토큰과 리프레시 토큰을 저장하기 위해서 레디스(Redis)와 관계형 데이터베이스를 이용하는 방법
■ Spring Security를 이용하는 OAuth 2.0 프로바이더로 보호되는 리소스에 대한 액세스 방법
■ 인가 서버에 자신을 동적으로 등록하는 웹 애플리케이션 구현 방법
■ 동적 클라이언트 등록을 이용해서 모바일 클라이언트의 안전성을 향상시키는 방법
■ PKCE를 이용한 안드로이드 클라이언트 보호 방법
■ 잘못된 리다이렉션으로부터 인가 서버를 보호하는 방법

이 책의 대상 독자

API 보안과 OAuth 2.0에 대한 기술을 향상시키고자 하는 소프트웨어 엔지니어와 보안 전문가를 대상으로 한다. 안드로이드 모바일 애플리케이션뿐만 아니라, Spring Boot 애플리케이션을 위한 OAuth 2.0 지원을 프로그램적으로 추가하고자 하는 개발자에게도 도움을 주고자 한다. 프로그래밍 지식과 기본적인 웹 개발에 대한 이해가 필요하다. 이 책 전반에 걸쳐 Spring Security OAuth2를 이용하기 때문에 사전에 Spring 프레임워크에 대한 경험이 있다면 도움이 될 것이다.

이 책의 구성

1장, ‘OAuth 2.0 기본’에서는 독자가 페이스북이나 링크드인, 구글 같이 공개된 OAuth 2.0 API와 상호작용할 수 있도록 간단한 예제를 통해 OAuth 2.0의 기본을 설명한다.
2장, ‘OAuth 2.0 프로바이더 구현’에서는 OAuth 2.0 프로바이더 구현 방법을 설명하며, 인가 서버와 리소스 서버가 다른 OAuth 2.0 그랜트 타입을 고려하는 것에도 도움을 준다. 또한 다른 데이터베이스에 액세스 토큰을 저장함으로써 리프레시 토큰을 효과적으로 처리하는 방법도 설명한다.
3장, ‘OAuth 2.0 보호 API’에서는 OAuth 2.0 스펙에서 설명하는 모든 그랜트 타입과 상호작용할 수 있는 OAuth 2.0 클라이언트 애플리케이션 만드는 방법을 설명한다. 또한 클라이언트에서 리프레시 토큰을 관리하는 방법도 설명한다.
4장, ‘OAuth 2.0 프로파일’에서는 몇 가지 OAuth 2.0 프로파일과 Spring Security OAuth2를 이용해 그것을 구현하는 방법을 설명한다. 프로파일은 토큰 폐기와 토큰을 원격에서 확인할 수 있게 해주는 토큰 인트로스펙션처럼 OAuth 2.0 스펙에서 다루고 있지 않는 특정 시나리오를 처리하는 데 이용된다. 또한 원격에서 토큰을 확인할 때 캐시를 사용하는 시기와 방법에 대한 몇 가지 가이드를 제공한다.
5장, ‘JWT’에서는 OAuth 2.0 액세스 토큰으로 JWT를 사용하는 방법을 설명하며, JWT 액세스 토큰에 의해 전달되는 내용을 보호하기 위해서 서명과 암호화를 제공하는 JWS와 JWE 같은 확장된 JWT의 구현 방법을 설명한다. 또한 OAuth 2.0에서 소유 증명키를 이용해 애플리케이션의 보안성을 향상시킬 수 있는 좋은 방법도 설명한다.
6장, ‘인증을 위한 OpenID Connect’에서는 인가와 인증의 차이점, OAuth 2.0이 어떻게 인증 프로토콜을 구축하는지 설명한다. OpenID Connect의 사용 방법을 설명하기 위해 모든 예제는 OpenID Connect 프로바이더가 아닌 클라이언트 애플리케이션을 대상으로 한다.
7장, ‘모바일 클라이언트 구현’에서는 안드로이드용 OAuth 2.0 네이티브 모바일 클라이언트 구현 방법을 다룬다. 네이티브 앱을 위한 OAuth 2.0이라는 이름으로 최근에 공개된 스펙에서 기술하고 있는 몇 가지 가이드라인도 설명한다.
8장, ‘보안 취약점 방지’에서는 OAuth 2.0 생태계에서 고려해야 하는 OAuth 2.0의 주요 구성 요소를 좀 더 효과적으로 보호할 수 있는 방법을 설명한다.

저자/역자 소개

지은이의 말

OAuth 2.0은 인가를 위한 표준 프로토콜이며, 클라이언트 개발자가 웹 애플리케이션과 데스크톱 애플리케이션, 모바일 폰 등을 위한 인가 플로우를 간단히 개발할 수 있게 하는 데 초점을 맞추고 있다. OAuth 스펙 문서가 있지만 복잡하다고 생각할 수도 있다. 이 책은 간단한 예제를 통해 OAuth 2.0을 이용할 수 있도록 도움을 준다. 흥미로운 예제를 통해 다양한 애플리케이션에 대한 특정 인가 플로우를 설명하며, Spring Security를 이용하고 안드로이드 애플리케이션을 만들어 실제적인 문제를 해결할 수 있는 유용한 방법을 제공한다.

지은이 소개

아돌포 엘로이 나시멘토(Adolfo Eloy Nascimento)

Elo7의 소프트웨어 엔지니어로서 컴퓨터 과학 학사 학위를 취득했고, 1999년부터 소프트웨어 개발 업무를 수행해왔다. 2003년에 ASP, PHP4/5, 자바스크립트와 자바(때로는 루비 온 레일즈 애플리케이션의 유지 보수 작업도 수행)를 이용한 웹 애플리케이션 개발을 시작했다. 마이크로서비스 아키텍처를 이용한 애플리케이션 설계와 퍼블릭 API를 모델링하고 상호작용하기 위해 2년 전부터 OAuth 2.0을 사용하기 시작했다.
기술 애호가로서 프로그래밍 언어와 새로운 기술에 대한 것을 읽고 배우는 것을 좋아한다. 또한 새로운 애플리케이션을 만드는 것뿐만 아니라 자신이 습득한 지식을 공유하는 것도 중요하다고 믿기 때문에 개인 블로그에 글을 쓰고 브라질에 있는 자바 매거진에 기사를 쓰거나 기술 도서를 집필하고 있다.

옮긴이의 말

OAuth 2.0은 현재 광범위하게 사용되고 있는 인가(Authorization) 프로토콜이다. 상대적으로 구현이 간단할 뿐만 아니라 다양한 확장성을 제공하고 있기 때문에 많이 사용된다고 할 수 있다. 즉, 데스크톱 애플리케이션, 모바일 앱, 그리고 웹 애플리케이션 등 다양한 형태의 애플리케이션에서 인가 플로우를 간단히 개발할 수 있게 해준다.
이 책을 통해 매우 다양한 형태의 OAuth 2.0 애플리케이션과 그 확장된 기능 구현에 대해 배울 수 있다. 즉, Spring Security를 이용해 다양한 형태의 OAuth 2.0 인가 플로우뿐만 아니라 동적 클라이언트 등록, 토큰 인트로스펙션, PKCE, JWT 액세스 토큰, OpenID Connect 같은 확장된 주제와 기능을 어떻게 구현하면 되는지 예제 코드를 기반으로 실질적으로 가이드한다. 또한 OAuth 2.0 클라이언트와 서버 간에 발생할 수 있는 보안 취약점과 그것을 방지하기 위한 방법을 제시한다.
OAuth 2.0은 엄밀히 말하면 인증(Authentication) 프로토콜이 아닌 인가 프로토콜이기 때문에 인증 프로토콜이 추가로 필요한 애플리케이션인 경우 OAuth 2.0을 확장해서 인증을 구현하거나 별도의 인증 프로토콜을 구현하는 데 대해 좀 더 깊이 생각할 수 있는 계기가 되길 희망한다.

옮긴이 소개

윤우빈

기존의 IT 기술과 새로 만들어지고 있는 최신 기술을 보안이라는 관점에서 이해하고, 새로운 기술, 비즈니스 영역의 새로운 보안 위협과 그에 대한 대응 기술에 대해 고민하며, 에이콘출판사를 통해 다양한 보안 관련 지식을 공유하고자 노력 중이다. 지금도 여전히 새로운 분야에 대한 보안 기술 연구와 다양한 보안 기술 개발을 위해 진땀 흘리고 있다.

목차

목차
  • 1장. OAuth 2.0 기본
    • 소개
    • 기반 환경 준비
    • 클라이언트 측에서 페이스북 사용자의 연락처 읽기
    • 서버 측에서 페이스북 사용자의 연락처 읽기
    • 링크드인의 보호된 리소스에 접근
    • 사용자 세션에 바이딩된 구글의 보호된 리소스에 접근

  • 2장. OAuth 2.0 프로바이더 구현
    • 소개
    • 인가 코드 그랜트 타입을 이용한 리소스 보호
    • 암시적 그랜트 타입 지원
    • OAuth 2.0으로의 전환을 위한 리소스 소유자 패스워드 자격증명 그랜트 타입
    • 클라이언트 자격증명 그랜트 타입
    • 리프레시 토큰 지원
    • 토큰과 클라이언트 정보를 저장하기 위한 관계형 데이터베이스 이용
    • Redis를 이용한 토큰 저장
    • 클라이언트 등록 구현
    • 중간에서 OAuth 2.0 프로바이더 분리
    • 공유된 데이터베이스를 이용한 토큰 유효성 검사 과정을 Gatling으로 테스트

  • 3장. OAuth 2.0보호 API
    • 소개
    • 인가 코드 그랜트 타입을 이용하는 OAuth 2.0 클라이언트
    • 암시적 그랜트 타입을 이용하는 OAuth 2.0 클라이언트
    • 리소스 소유자 패스워드 자격증명 그랜트 타입을 이용하는 OAuth 2.0 클라이언트
    • 클라이언트 자격증명 그랜트 타입을 이용하는 OAuth 2.0 클라이언트
    • 클라이언트에서의 리프레시 토큰 관리
    • RestTemplate으로 OAuth 2.0의 보호된 API에 대한 접근

  • 4장. OAuth 2.0 프로파일
    • 소개
    • 발급된 토큰 폐기
    • 토큰 인트로스펙션을 이용한 원격 검증
    • 캐시를 이용한 원격 검증 성능 향상
    • Gatling을 이용한 원격 토큰 검증에 대한 부하 테스트
    • 동적 클라이언트 등록

  • 5장. JWT
    • 소개
    • JWT 액세스 토큰 만들기
    • 리소스 서버에서 JWT 토큰 검증
    • JWT에 사용자 정의 클레임 추가
    • JWT 토큰의 비대칭 서명
    • 비대칭 서명된 JWT 토큰 검증
    • JWT 토큰을 암호화해서 보호하기 위한 JWE
    • 리소스 서버에서의 JWE 사용
    • OAuth 2.0 프로바이더에서 소유 증명 키 사용
    • 클라이언트에서 소유 증명 키 사용

  • 6장. 인증을 위한 OpenID Connect
    • 소개
    • 구글 OpenID Connect를 통한 구글 사용자의 인증
    • ID 프로바이더로부터 사용자 정보 획득
    • 사용자 인증을 위한 페이스북 이용
    • Spring Security 5로 구글 OpenID Connect 이용
    • Spring Security 5로 마이크로소프트와 구글 OpenID 프로바이더 함께 이용

  • 7장. 모바일 클라이언트 구현
    • 소개
    • 안드로이드 개발 환경 준비
    • 시스템 브라우저로 인가 코드를 이용하는 안드로이드 OAuth 2.0 클라이언트 만들기
    • 시스템 브라우저로 암시적 그랜트 타입을 이용한 안드로이드 OAuth 2.0 클라이언트 만들기
    • 내장 브라우저를 이용하는 안드로이드 2.0 클라이언트 만들기
    • OAuth 2 서버가 제공하는 패스워드 그랜트 타입을 이용하는 클라이언트 앱
    • PKCE로 안드로이드 클라이언트 보호
    • 모바일 애플리케이션으로 동적 클라이언트 등록 이용

  • 8장. 보안 취약점 방지
    • 소개
    • 리소스 서버에 대한 요청자 검증
    • 권한 범위 검증을 통한 리소스 서버 보호
    • 사용자의 리소스를 보호하기 위한 사용자 역할과 권한 범위 바인딩
    • 인가 코드 삽입으로부터 클라이언트 보호
    • 잘못된 리다이렉션으로부터 인가 서버 보호

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안