# 7.마이크로서비스 보안

## 마이크로 서비스 보안

* 인증/인가
* 스프링 클라우드 보안 + OAuth2
* 스프링 클라우드 보안 + OAuth2 + JWT활용한 방식

### OAuth 2.0 소개

* **토큰 기반**의 보안 프레임워크
* 제 3자 서비스(구글, 페북 등)에서 자신을 인증할 수 있음
* 외부에서 -> 토큰 주면 -> **인증서비에서  유효성 검사**
* 인증 후 -> 사용자의 요청 -> **매번 자격증명을 하지 않고도 사용자를 인증**
* OAuth2의 진정한 힘은 **쉽게 외부(페북, 구글...)와 통합이 가능**
* **자격증명을 외부업체의 서비스에 계속 전달하지 않고도 그 서비스에서 사용자 인증과 인가를 수행 가능**

#### **4개의 컴포넌트**

* **보호자원(protected resource)**
  * 보호하려는 자원, 여기서는 **마이크로 서비스**
  * **인증된 사용자만 엑세스 할 수 있게**
* **자원 소유자(resource owner)**
  * 식별 가능한 **`애플리케이션 이름 시크릿 키`** 받음
  * **`시크릿키`** -> OAuth2 토큰을  인증할 때 전달되는 **자격증명의 일부**
* **애플리케이션(app)**
  * 사용자를 대신하여 호출할 애플리케이션
  * 프록시 같은 개념, or  중간 매개체
* **OAuth2 인증서버(OAuth2 authentication server)**
  * 애플리케이션과 소비될 서비스(자원) 사이의 **중개자**
  * 애플리케이션 -> 모든서비스 접근 -> **자격증명 전달 없이 사용자 인증**

#### 인증체계

* 패스워드 (password)
* 클라이언트 자격증명 (client credential)
* 인가 코드 (authorization code)
* 암시적 (implicit)
