책 소개
요약
엔터프라이즈 API는 비즈니스 기능을 외부에 노출하는 일반적인 방법이 됐다. 기능을 노출하는 것은 편리하지만, 물론 악용의 위험이 있다. 소프트웨어 시스템 설계의 경우와 마찬가지로, 사람들은 API 설계 단계에서 보안 요소를 무시하는 경향이 있다. 배포나 통합 시에만 보안을 걱정하기 시작한다. 보안은 사후에 고려해서는 안 된다. 보안은 모든 소프트웨어 시스템 설계의 필수 요소로 설계 초기부터 신중하게 고려해야 한다.
이 책은 중요한 비즈니스 자산을 보호하고 API를 보안하는 방법에 대한 내용으로, 보안의 필요성과 API 보안을 위해 사용할 수 있는 옵션에 대해 알려주는 것을 목표로 한다.
이 책에서 다루는 내용
■ 엔터프라이즈 API의 안전한 설계, 개발, 배포
■ 비즈니스 요구 사항에 맞는 보안 표준 및 프로토콜 선택
■ OAuth 2.0 위협 환경을 이해해 보안 악용 완화
■ 인증을 통합해 기업 방화벽을 넘어 비즈니스 API 확장
■ API를 보호를 통해 엣지에서 마이크로 서비스 보호
■ API에 안전하게 액세스하기 위한 네이티브 모바일 애플리케이션 개발
■ OAuth 2.0으로 보호되는 SaaS API와 애플리케이션 통합
목차
목차
- 1장. API 규칙
- API 경제
- 아마존
- 세일즈포스
- 우버
- 페이스북
- 넷플릭스
- 월그린스
- 정부
- IBM 왓슨
- 오픈 뱅킹
- 헬스케어
- 웨어러블
- 사업 모델
- API의 변화
- API 관리
- 마이크로서비스에서 API의 역할
- 요약
- API 경제
- 2장. API 보안 설계
- 문제의 삼위일체
- 설계 도전 과제
- 사용자 경험
- 성능
- 가장 취약한 연결고리
- 심층 방어
- 내부자 공격
- 감추는 것을 통한 보안
- 설계 원칙
- 최소 권한
- 고장 안전 디폴트
- 메커니즘의 경제성
- 완전한 중재
- 개방형 설계
- 권한 분리
- 최소 공통 메커니즘
- 심리적 수용
- 보안 3 요소
- 기밀성
- 무결성
- 가용성
- 보안 제어
- 인증
- 인가
- 부인 방지
- 감사
- 요약
- 3장. 전송 계층 보안을 이용한 API 보안
- 환경 설정
- Order API의 배포
- 전송 계층 보안을 이용한 Order API 보안
- TLS 상호 인증을 이용한 Order API 보호
- 도커에서 OpenSSL 실행
- 요약
- 4장. OAuth 2.0 기초
- OAuth 2.0 이해
- OAuth 2.0 구성 요소
- 승인 방식
- 인가 코드 승인 방식
- 암시적 승인 유형
- 자원 소유자 패스워드 자격증명 승인 유형
- 클라이언트 자격증명 승인 유형
- 갱신 승인 유형
- 적절한 승인 유형을 선택하는 방법
- OAuth 2.0 토큰 유형
- OAuth 2.0 베어러 토큰 프로필
- OAuth 2.0 클라이언트 유형
- JWT 보안 인가 요청(JAR)
- 푸시된 인가 요청
- 요약
- 5장. API 게이트웨이를 이용한 에지 보안
- Zuul API 게이트웨이 설정
- Order API 실행
- Zuul API 게이트웨이 실행
- 배후에서 벌어지는 일
- Zuul API 게이트웨이에서 TLS 활성화
- Zuul API 게이트웨이에서 OAuth 2.0 토큰 유효성 검사 시행
- OAuth 2.0 보안 토큰 서비스 설정
- OAuth 2.0 보안 토큰 서비스 테스트
- OAuth 2.0 토큰 유효성 검사를 위한 Zuul API 게이트웨이 설정
- Zuul API 게이트웨이와 주문 서비스 사이에서 상호 TLS 활성화
- 독립형 액세스 토큰을 이용한 Order API 보안
- JWT를 발행하기 위한 인가 서버 설정
- JWT를 이용한 Zuul API 게이트웨이 보호
- 웹 애플리케이션 방화벽의 역할
- 요약
- Zuul API 게이트웨이 설정
- 6장. OpenID 커넥트(OIDC)
- OpenID부터 OIDC까지
- 아마존은 여전히 OpenID 2.0을 사용한다
- OpenID 커넥트 이해
- ID 토큰 분석
- OpenID 커넥트 요청
- 사용자 속성 요청
- OpenID 커넥트 흐름
- 사용자 정의 사용자 속성 요청
- OpenID 커넥트 디스커버리
- OpenID 커넥트 ID 공급자 메타데이터
- 동적 클라이언트 등록
- 보안 API를 위한 OpenID 커넥트
- 요약
- 7장. JSON 웹 서명을 이용한 메시지 수준 보안
- JSON 웹 토큰의 이해
- JOSE 헤더
- JWT 클레임 세트
- JWT 서명
- JSON 웹 서명(JWS)
- JWS 콤팩트 직렬화
- 콤팩트 직렬화의 서명 절차
- JWS JSON 직렬화
- JSON 직렬화의 서명 절차
- 요약
- JSON 웹 토큰의 이해
- 8장. JSON 웹 암호화를 이용한 메시지 수준 보안
- JWE 콤팩트 직렬화
- JOSE 헤더
- JWE 암호화 키
- JWE 초기화 벡터
- JWE 암호문
- JWE 인증 태그
- 암호화 절차(콤팩트 직렬화)
- JSON 직렬화
- JWE Protected 헤더
- JWE Shared Unprotected 헤더
- JWE Per-Recipient Unprotected 헤더
- JWE 초기화 벡터
- JWE 암호문
- JWE 인증 태그
- 암호화 절차(JSON 직렬화)
- Nested JWTs
- 요약
- JWE 콤팩트 직렬화
- 9장. OAuth 2.0 프로파일
- 토큰 내부 검사
- 체인 승인 방식
- 토큰 교환
- 동적 클라이언트 등록 프로파일
- 토큰 폐지 프로파일
- 요약
- 10장. 네이티브 모바일 앱을 통한 API 접근
- 모바일 싱글 사인온(SSO)
- 자격증명을 직접 이용한 로그인
- WebView를 이용한 로그인
- 시스템 브라우저를 이용한 로그인
- 네이티브 모바일 앱에서 OAuth 2.0 사용
- 앱 간 통신
- PKCE
- 브라우저리스(Browser-less) 앱
- OAuth 2.0 디바이스 인가 승인
- 요약
- 모바일 싱글 사인온(SSO)
- 11장. OAuth 2.0 토큰 바인딩
- 토큰 바인딩의 이해
- 토큰 바인딩 협상
- 토큰 바인딩 프로토콜 협상을 위한 TLS 확장
- 키 생성
- 소유 증명
- OAuth 2.0 리프레시 토큰을 위한 토큰 바인딩
- OAuth 2.0 인가 코드/액세스 토큰을 위한 토큰 바인딩
- TLS 종료
- 요약
- 토큰 바인딩의 이해
- 12장. API 접근 페더레이팅
- 페더레이션 활성화
- 브로커 인증
- 보안 어써션 마크업 언어(SAML)
- SAML 2.0 클라이언트 인증
- OAuth 2.0을 위한 SAML 승인 유형
- OAuth 2.0을 위한 JWT 승인 유형
- JWT 승인 유형 애플리케이션
- JWT 클라이언트 인증
- JWT 클라이언트 인증 애플리케이션
- JWT 파싱과 검증
- 요약
- 13장. 사용자 관리 액세스
- 사용 예
- UMA 2.0 역할
- UMA 프로토콜
- 대화형 클레임 수집
- 요약
- 14장. OAuth 2.0 보안
- ID 제공자 혼합
- 사이트 간 요청 위조(CSRF)
- 토큰 재사용
- 토큰 노출/export
- 오픈 리다이렉트
- 코드 차단 공격
- 암시적 승인 유형에서의 보안 결함
- 구글 문서 피싱 공격
- 요약
- 15장. 패턴과 연습
- 신뢰할 수 있는 서브시스템을 통한 직접 인증
- 위임된 접근 통제를 통한 단일 사용자 인증
- 위임된 윈도우 인증을 통한 단일 사용자 인증
- 위임된 접근 통제를 통한 자격증명 프록시
- 위임된 접근 통제를 통한 JSON 웹 토큰
- JSON 웹 서명을 통한 부인 방지
- 사슬로 연결된 접근 위임
- 신뢰할 수 있는 마스터 접근 위임
- 위임된 접근 통제를 통한 자원 보안 토큰 서비스
- 유선으로 인증 정보를 전달하지 않는 위임된 접근 권한
- 요약
- 부록A. 인증 위임의 진화
- 직접 위임과 중개 위임
- 진화
- Google ClientLogin
- Google AuthSub
- 플리커 인증 API
- 야후! 브라우저 기반 인증(BBAuth)
- OAuth
- 부록B. OAuth 1.0
- 토큰 댄스
- 임시 인증 정보 요청 단계
- 자원 소유자 권한 부여 단계
- 토큰 인증 정보 요청 단계
- OAuth 1.0을 사용하는 보호된 비즈니스 API 호출
- oauth_signature 이해
- 임시 인증 정보 요청 단계에서 기본 문자열 생성
- 토큰 인증 정보 요청 단계에서 기본 문자열 생성
- 서명 생성
- API 호출에서 기본 문자열 생성
- 삼각 OAuth와 이각 OAuth
- OAuth WRAP
- 클라이언트 계정과 패스워드 프로파일
- 증명 프로파일
- 사용자 이름과 패스워드 프로파일
- 웹 앱 프로파일
- 리치 앱 프로파일
- WRAP로 보호된 API 접근
- OAuth 2.0에 WRAP
- 토큰 댄스
- 부록C. TLS의 동작 방식
- TLS의 변화
- 전송 제어 프로토콜
- TLS는 어떻게 동작하는가
- TLS 핸드셰이크
- 애플리케이션 데이터 전송
- 부록D. UMA의 발전
- 서비스 제공 보호 규약
- UMA와 OAuth
- UMA 1.0 구조
- UMA 1.0의 진행 단계
- UMA 1단계: 자원 보호
- UMA 2단계: 인증 획득
- UMA 3단계: 보호된 자원 접근
- UMA API
- Protection API
- Authorization API
- 서비스 제공 보호 규약
- 부록E. Base64 URL 인코딩
- 부록F. 기본/다이제스트 인증
- HTTP 기본 인증
- HTTP 다이제스트 인증
- 부록G. OAuth 2.0 MAC 토큰 프로필
- 베어러 토큰과 MAC 토큰
- MAC 토큰 획득
- OAuth 2.0 MAC 토큰 프로필로 보호된 API 호출
- MAC 계산
- 자원 서버에 의한 MAC 유효성 검사
- OAuth 승인 유형과 MAC 토큰 프로필
- OAuth 1.0과 OAuth 2.0 MAC 토큰 프로필