OAuth 2 in Action [OAuth 아키텍처에 대한 모든 것]
- 원서명OAuth 2 in Action (ISBN 9781617293276)
- 지은이저스틴 리처(Justin Richer), 안토니오 산소(Antonio Sanso)
- 옮긴이윤우빈
- ISBN : 9791161751450
- 36,000원
- 2018년 04월 17일 펴냄 (절판)
- 페이퍼백 | 484쪽 | 188*235mm
- 시리즈 : 해킹과 보안
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
요약
OAuth 2.0은 서비스 사용자가 애플리케이션에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 프로토콜이다. OAuth는 페이스북과 구글 뿐만 아니라 스타트업과 클라우드 서비스에 이르기까지 모든 곳에서 사용된다. 이 책을 통해서 OAuth 2.0의 모든 것 즉, OAuth 2.0의 개요과 구성 요소, 구성 요소 간의 상호 작용 그리고 구현 방법에 대해서 배우게 될 것이다.
추천의 글
내용이 비어 있는 페이지보다 어려운 것은 없다. 그것은 당신을 빤히 쳐다보며 조롱한다. 여러분은 무엇을 하고 싶은지 알고 있으며, 해내고 싶은 명확하고 멋진 그림을 갖고 있다. 상사나 고객이 여러분이 만들어낸 기쁨으로 황홀하게 웃음짓는 모습도 그릴 수 있을 것이다. 하지만 문제는 여러분 앞에 빈 페이지가 놓여 있다는 것이다.
그래서 도구에 손을 뻗게 된다. 이 책을 읽고 있는 사람은 개발자나 ID 관리 전문가일 가능성이 크다. 어느 쪽이든 무엇보다 보안이 중요하고 구축하고자 하는 것을 보호하길 원할 것이다.
OAuth에 대해 들어본 적이 있을 것이다. OAuth가 리소스, 특히, API를 보호하는 것과 관련이 있다는 것도 알고 있을 것이다. OAuth는 매우 인기가 많고 무엇이든 할 수 있다. 하지만 무엇이든 할 수 있는 것의 문제는 뭔가를 하기 어렵게 만든다는 것이다. 그런 것은 또 하나의 빈 페이지라고 할 수 있다.
저스틴과 안토니오가 쓴 이 책을 읽어보기 바란다. 무엇이든 할 수 있는 일을 할 때 그것이 정체되는 것을 막는 가장 쉬운 방법은 그냥 뭔가를 시작하는 것이다. 이 책은 OAuth가 무엇인지를 설명하고 있을 뿐만 아니라 OAuth 프로세스 전반에 걸쳐 무엇을 해야 하는지 알려주고 있다. 결국 OAuth를 도구로서 깊이 이해하게 되고 더 이상 여러분 앞에 빈 페이지가 놓여 있지 않게 될 것이다. 즉, 앞으로 멋진 것을 전달할 준비가 돼 있을 것이다.
OAuth는 매우 강력한 도구고, 이 강력함은 유연함에서 비롯된다. 유연함은 종종 자신이 하고 싶은 것을 할 수 있는 능력뿐만 아니라 안전하지 않은 방식으로 뭔가를 수행할 수 있는 능력을 의미한다. OAuth는 중요한 데이터에 접근할 수 있는 API에 대한 접근을 통제하기 때문에, 비정상적인 패턴을 피하고 모범적인 사례를 사용해 안전한 방법으로 OAuth를 이용하는 것이 중요하다. 다르게 말하면, 어떤 식으로든 어떤 것을 할 수 있는 유연함을 갖고 있다고 해서 반드시 그렇게 해야 하는 것은 아니다.
OAuth를 사용해야 하는 또 한 가지 이유는 API 호출들을 조정하고 그 결과 어떤 멋진 것을 할 수 있기 때문이다. 실현하고자 하는 멋진 생각을 페이지에 가득 채울 수 있다. OAuth는 그 길로 가기 위한 방법을 좀 더 안전하게 인도해준다.
감사하게도, 저자들은 해야 할 것과 하지 말아야 할 것에 대한 실용적인 가이드를 제공해주고 있다. 그들은 여러분이 “그냥 이것을 끝내고 싶다”와 “이것이 안전한지 확인하고 싶다”라는 생각을 모두 갖고 있다는 것을 알고 있다.
여러분의 머릿속과 여러분 고객의 손에 의해 가득 채워진 페이지를 위한 작업은 결국 그렇게 힘들지 않다는 것을 깨닫게 될 것이다.
이 책에서 다루는 내용
█ OAuth 2 프로토콜과 설계
█ OAuth 2를 이용한 인가
█ OpenID 커넥트와 UMA(User-Managed Access)
█ 구현에 따른 보안 위험
█ JOSE, 인트로스펙션, 폐기, 등록
█ REST API 보호화 접근
이 책의 구성
1장에서는 OAuth 2.0 프로토콜의 개요와 OAuth 이전의 API 보안과 OAuth가 만들어진 동기에 대해 설명한다.
2장에서는 OAuth 2.0의 핵심적인 그랜트 타입이면서 가장 널리 사용되는 인가 코드 그랜트 타입에 대해 자세히 다룬다.
3장부터 5장까지는 간단하지만 모든 기능을 갖춘 OAuth 2.0 클라이언트와 보호된 리소스 그리고 인가 서버를 구축하는 방법을 설명한다.
6장에서는 인가 코드가 아닌 다른 유형의 그랜트 타입과 네이티브 애플리케이션에 대해 살펴본다.
7장부터 9장까지는 OAuth 2.0 클라이언트와 보호된 리소스 그리고 인가 서버의 일반적인 보안 취약점과 그것을 피하는 방법에 대해 논의한다.
10장에서는 OAuth 2.0 Bearer 토큰과 인가 코드에 대한 공격과 보안 취약점 그리고 방지 방법에 대해 논의한다.
11장에서는 인코딩에 사용되는 JWT(JSON Web Token), JOSE 메커니즘, 토큰 인트로스펙션, 토큰 폐기에 대해 살펴본다.
12장에서는 동적 클라이언트 등록과 그것이 OAuth 2.0 생태계에 어떻게 영향을 미치는지에 대해 살펴본다.
13장에서는 OAuth 2.0이 인증 프로토콜이 아닌 이유와 OpenID 커넥트를 이용해 OAuth 기반으로 인증 프로토콜을 구축하는 방법에 대해 실펴본다.
14장에서는 OAuth 2.0 기반 위에 구축되며 사용자 간 공유를 지원하는 UMA(User Managed Access) 프로토, OpenID 커넥터, OAuth 2.0의 HEART, iGov 프로파일, 그리고 해당 프로토콜들이 특정 산업에 어떻게 적용되는지에 대해 살펴본다.
15장에서는 OAuth 2.0의 일반적인 Bearer 토큰이 아닌 PoP(Proof of Possession) 토큰과 TLS 토큰이 OAuth 2.0과 연결돼 어떻게 동작하는지에 대해 알아본다.
16장에서는 모든 것을 정리하고 이 책의 내용을 라이브러리와 더 확장된 OAuth 2.0 커뮤니티에 어떻게 적용하는지에 대해 논의한다.
목차
목차
- 1부. 첫 번째 단계
- 1장. OAuth 2.0이 무엇이고, 왜 관심을 가져야 할까?
- 1.1 OAuth 2.0은 무엇인가?
- 1.2 과거: 자격 증명 공유(그리고 자격 증명 탈취)
- 1.3 접근 권한 위임
- 1.3.1 HTTP Basic과 비밀번호 공유 방식을 넘어
- 1.3.2 권한 위임: 중요성과 사용 방법
- 1.3.3 사용자 주도 보안과 사용자 선택
- 1.4 OAuth 2.0: 좋은 점과 나쁜 점
- 1.5 OAuth 2.0이 아닌 것
- 1.6 요약
- 2장. OAuth 2.0의 기본
- 2.1 OAuth 2.0 프로토콜의 개요: 토큰 획득과 사용
- 2.2 OAuth 2.0 인가 그랜트
- 2.3 OAuth의 구성원: 클라이언트, 인가 서버, 리소스 소유자 그리고 보호된 리소스
- 2.4 OAuth의 구성 요소: 토큰, 범위 그리고 인가 그랜트
- 2.4.1 액세스 토큰
- 2.4.2 범위
- 2.4.3 리프레시 토큰
- 2.4.4 인가 그랜트
- 2.5 OAuth의 구성원과 구성 요소 간의 상호 작용: 백 채널, 프런트 채널 그리고 엔드 포인트
- 2.5.1 백 채널 통신
- 2.5.2 프런트 채널 통신
- 2.6 요약
- 2부. OAuth 2 환경 구축
- 3장. 간단한 OAuth 클라이언트
- 3.1 인가 서버에 OAuth 클라이언트 등록
- 3.2 인가 코드 그랜트 타입을 이용해 토큰 얻기
- 3.2.1 인가 요청 보내기
- 3.2.2 인가 요청에 대한 응답 처리
- 3.2.3 크로스 사이트 공격을 방지하기 위한 state 파라미터 추가
- 3.3 보호된 리소스에 접근하기 위한 토큰 사용
- 3.4 액세스 토큰 갱신
- 3.5 요약
- 4장. 간단한 OAuth 리소스 서버
- 4.1 HTTP 요청에서 OAuth 토큰 파싱
- 4.2 액세스 토큰의 유효성 확인
- 4.3 토큰에 기반한 콘텐츠 제공
- 4.3.1 권한 범위에 따른 작업
- 4.3.2 권한 범위에 따른 데이터 반환
- 4.3.3 사용자에 따른 데이터 반환
- 4.3.4 추가 접근 통제
- 4.4 요약
- 5장. 간단한 OAuth 인가 서버
- 5.1 OAuth 클라이언트 등록 관리
- 5.2 클라이언트 인가
- 5.2.1 인가 엔드 포인트
- 5.2.2 클라이언트 인가
- 5.3 토큰 발급
- 5.3.1 클라이언트 인증
- 5.3.2 인가 그랜트 요청 처리
- 5.4 리프레시 토큰 지원
- 5.5 권한 범위 지원
- 5.6 요약
- 6장. 현실 세계의 OAuth 2.0
- 6.1 인가 그랜트 타입
- 6.1.1 암시적 그랜트 타입
- 6.1.2 클라이언트 자격 증명 그랜트 타입
- 6.1.3 리소스 소유자 자격 증명 그랜트 타입
- 6.1.4 어설션 그랜트 타입
- 6.1.5 올바른 그랜트 타입 선택
- 6.2 클라이언트 배포
- 6.2.1 웹 애플리케이션
- 6.2.2 웹 브라우저 애플리케이션
- 6.2.3 네이티브 애플리케이션
- 6.2.4 클라이언트 시크릿 관리
- 6.3 요약
- 6.1 인가 그랜트 타입
- 3부. OAuth 2.0 구현과 보안 취약점
- 7장. 일반적인 클라이언트 보안 취약점
- 7.1 일반적인 클라이언트 보안
- 7.2 클라이언트에 대한 CSRF 공격
- 7.3 클라이언트 자격 증명 탈취
- 7.4 리다이렉트 URI 등록
- 7.4.1 레퍼러를 통한 인가 코드 탈취
- 7.4.2 오픈 리다이렉터를 통한 토큰 탈취
- 7.5 인가 코드 탈취
- 7.6 토큰 탈취
- 7.7 네이티브 애플리케이션 모범 사례
- 7.8 요약
- 8장. 일반적인 보호된 리소스 보안 취약점
- 8.1 보호된 리소스의 보안 취약점
- 8.2 보호된 리소스의 엔드 포인트 설계
- 8.2.1 리소스 엔드 포인트를 보호하는 방법
- 8.2.2 암시적 그랜트 지원 추가
- 8.3 토큰 재전송
- 8.4 요약
- 9장. 일반적인 인가 서버 보안 취약점
- 9.1 일반적인 보안
- 9.2 세션 가로채기
- 9.3 리다이렉트 URI 조작
- 9.4 클라이언트 가장 impersonation
- 9.5 픈 리다이렉터
- 9.6 요약
- 10장. 일반적인 OAuth 토큰 보안 취약점
- 10.1 Bearer 토큰
- 10.2 Bearer 토큰 사용에 있어서의 위험과 고려 사항
- 10.3 토큰 보호 방법
- 10.3.1 클라이언트에서 탈취
- 10.3.2 인가 서버에서 탈취
- 10.3.3 보호된 리소스에서 탈취
- 10.4 인가 코드
- 10.4.1 Proof Key for Code Exchange(PKCE)
- 10.5 요약
- 4부. OAuth에 대한 더 많은 것
- 11장. OAuth 토큰
- 11.1 OAuth 토큰이 무엇인가?
- 11.2 구조화된 토큰: JSON Web Token
- 11.2.1 JWT의 구조
- 11.2.2 JWT 클레임
- 11.2.3 서버에서의 JWT 구현
- 11.3 암호화를 통한 토큰 보호: JOSE
- 11.3.1 HS256를 이용한 대칭 시그니처
- 11.3.2 RS256을 이용한 비대칭 시그니처
- 11.3.3 다른 토큰 보호 방법
- 11.4 온라인으로 토큰의 정보를 조회: 토큰 인트로스펙션
- 11.4.1 인트로스펙션 프로토콜
- 11.4.2 인트로스펙션 엔드 포인트
- 11.4.3 인트로스펙션 토큰
- 11.4.4 인트로스펙션과 JWT의 결합
- 11.5 토큰 폐기로 토큰의 라이프사이클 관리
- 11.5.1 토큰 폐기 프로토콜
- 11.5.2 폐기 엔드 포인트 구현
- 11.5.3 토큰 폐기
- 11.6 OAuth 토큰 라이프사이클
- 11.7 요약
- 12장. 클라이언트 동적 등록
- 12.1 서버가 클라이언트를 식별하는 방법
- 12.2 실시간으로 클라이언트 등록
- 12.2.1 동작 방식
- 12.2.2 왜 동적 등록을 사용하는가?
- 12.2.3 등록 엔드 포인트의 구현
- 12.2.4 클라이언트 등록
- 12.3 클라이언트 메타 데이터
- 12.3.1 핵심적인 클라이언트 메타 데이터 필드 이름 테이블
- 12.3.2 사람이 읽을 수 있는 클라이언트 메타 데이터의 국제화
- 12.3.3 소프트웨어 명세서
- 12.4 동적으로 등록된 클라이언트의 관리
- 12.4.1 관리 프로토콜의 동작 방식
- 12.4.2 동적 클라이언트 등록 관리 API 구현
- 12.5 요약
- 13.1 OAuth 2.0이 인증 프로토콜이 아닌 이유
- 13.1.1 인증 vs. 인가
- 13.2 OAuth를 인증 프로토콜로 매핑
- 13.3 OAuth 2.0 인증 방법
- 13.4 인증을 위해 OAuth 2.0을 사용하는 데 있어서의 일반적인 함정
- 13.4.1 인증의 증거로서의 액세스 토큰
- 13.4.2 인증의 증거로서의 보호된 API에 대한 접근
- 13.4.3 액세스 토큰 삽입 3
- 13.4.4 수신자 제한의 결여
- 13.4.5 잘못된 사용자 정보 삽입
- 13.4.6 식별 제공자마다 다른 프로토콜 사용
- 13.5 OpenID 커넥트: OAuth 2.0 기반의 인증과 식별 표준
- 13.5.1 ID 토큰
- 13.5.2 UserInfo 엔드 포인트
- 13.5.3 동적 서버 발견과 클라이언트 등록
- 13.5.4 OAuth 2.0과의 호환성
- 13.5.5 고급 기능
- 13.6 간단한 OpenID 커넥트 시스템 구축
- 13.6.1 ID 토큰 생성
- 13.6.2 UserInfo 엔드 포인트
- 13.6.3 ID 토큰 파싱
- 13.6.4 UserInfo 가져오기
- 13.7 요약
- 14.1 UMA
- 14.1.1 UMA가 중요한 이유
- 14.1.2 UMA 프로토콜의 동작 방식
- 14.2 HEART
- 14.2.1 HEART가 중요한 이유
- 14.2.2 HEART 스펙
- 14.2.3 역학적인 HEART 프로파일
- 14.2.4 의미론적 HEART 프로파일
- 14.3 iGov
- 14.3.1 iGov가 중요한 이유
- 14.3.2 iGov의 미래
- 14.4 요약
- 15.1 왜 Bearer 이외의 토큰이 필요할까?
- 15.2 PoPProof of Possession 토큰
- 15.2.1 PoP 토큰 요청과 발급
- 15.2.2 보호된 리소스에 대한 PoP 토큰의 사용
- 15.2.3 PoP 토큰 검증
- 15.3 PoP 토큰 지원을 위한 구현
- 15.3.1 토큰과 키 발급
- 15.3.2 서명된 헤더 생성과 전달
- 15.3.3 헤더 파싱, 토큰 인트로스펙션, 시그니처 검증
- 15.4 TLS 토큰 바인딩
- 15.5 요약
- 16.1 올바른 도구
- 16.2 주요 의사 결정
- 16.3 더 큰 생태계
- 16.4 커뮤니티
- 16.5 미래
- 16.6 요약
- A.1 코드 프레임워크 소개
도서 오류 신고
정오표
정오표
[p.66 : 2행]
인가 코드(authorization coe)
->
인가 코드(authorization code)
[p.209 : 8행]
그대로 유지되기 때문에 최종 방문페이지를
->
그대로 유지되기 때문에 최종 방문페이지는
[p.369 : '13.5.2 UserInfo 엔드 포인트' 1행]
OpenDI
->
OpenID