committed by
GitHub
1 changed files with 101 additions and 0 deletions
@ -0,0 +1,101 @@ |
|||
# 보안 - 도입부 |
|||
|
|||
보안, 인증 및 권한 부여를 처리하는 방법에는 여러 가지가 있습니다. |
|||
|
|||
그리고 일반적으로 복잡하고 "어려운" 주제입니다. |
|||
|
|||
많은 프레임워크와 시스템에서 보안과 인증을 처리하는 것만으로도 많은 노력과 코드가 필요합니다(많은 사례에서 작성된 모든 코드의 50% 이상이 될 수 있습니다). |
|||
|
|||
**FastAPI**는 모든 보안 명세를 공부하지 않고도, **보안**을 표준 방식으로 쉽고 빠르게 다룰 수 있는 몇몇 툴들을 제공합니다. |
|||
|
|||
그러나 먼저 소소한 개념들을 알아봅시다. |
|||
|
|||
## 흥미가 없다면 |
|||
|
|||
이러한 용어에 관심이 없고 아이디와 비밀번호를 기반으로 한 인증으로 보안을 추가해야 하는 경우 *당장* 다음 장으로 넘어가도 좋습니다. |
|||
|
|||
## OAuth2 |
|||
|
|||
OAuth2는 인증 및 권한 부여를 처리하는 여러 방법을 정의하는 명세입니다. |
|||
|
|||
상당히 광범위한 명세이며 여러 복잡한 사용 사례를 다룹니다. |
|||
|
|||
여기에는 "서드 파티"를 사용하여 인증하는 방법이 포함됩니다. |
|||
|
|||
바로 그것이 "페이스북, 구글, 트위터, 깃허브에서 로그인"하는 모든 시스템 아래에서 사용하는 것입니다. |
|||
|
|||
### OAuth 1 |
|||
|
|||
OAuth 1은 OAuth2와 매우 다르고 통신을 암호화하는 방법에 대한 사양을 직접 포함하기 때문에 더 복잡합니다. |
|||
|
|||
요즘에는 인기가 없거나 쓰이지 않습니다. |
|||
|
|||
OAuth2는 통신을 암호화하는 방법을 명세하지 않으며 애플리케이션이 HTTPS로 제공될 것으로 예상합니다. |
|||
|
|||
!!! 팁 |
|||
**배포**에 대한 섹션에서 Traefik을 사용하여 HTTPS를 무료로 설정하고 암호화하는 방법을 볼 수 있습니다. |
|||
|
|||
|
|||
## OpenID Connect |
|||
|
|||
OpenID Connect는 **OAuth2**를 기반으로한 다른 명세입니다. |
|||
|
|||
OAuth2에서 상대적으로 모호한 몇 가지 사항을 지정하여 OAuth2를 확장하여 상호 운용성을 높입니다. |
|||
|
|||
예를 들어, 구글 로그인은 OpenID Connect를 사용합니다(OAuth2를 아래에 두고 사용합니다). |
|||
|
|||
그러나 페이스북은 OpenID Connect를 사용하지 않습니다. OAuth2를 기반으로 자신들이 개조한 것을 사용합니다. |
|||
|
|||
### OpenID (not "OpenID Connect") |
|||
|
|||
"OpenID" 명세도 있었습니다. **OpenID Connect**와 같은 문제를 해결하려고 했지만 OAuth2 기반이 아니었습니다. |
|||
|
|||
그래서 그것은 완전히 추가적인 시스템입니다. |
|||
|
|||
요즘에는 인기가 없거나 쓰이지 않습니다. |
|||
|
|||
## OpenAPI |
|||
|
|||
OpenAPI(이전에는 Swagger로 알려졌던)는 API(현재는 리눅스 재단의 일부) 구축을 위한 개방형 사양입니다. |
|||
|
|||
**FastAPI**는 **OpenAPI**를 기반으로 합니다. |
|||
|
|||
이것이 여러 자동 대화형 문서 인터페이스, 코드 생성 등을 가능하게 하는 이유입니다. |
|||
|
|||
OpenAPI에는 다중 보안 "체계"를 정의하는 방법이 있습니다. |
|||
|
|||
이를 사용하면 이러한 대화형 문서 시스템을 포함하여 이러한 모든 표준 기반 도구를 활용할 수 있습니다. |
|||
|
|||
OpenAPI는 다음의 보안 체계를 정의합니다: |
|||
|
|||
* `apiKey`: 다음에서 올 수 있는 애플리케이션 구별 키: |
|||
* 쿼리 매개변수. |
|||
* 헤더. |
|||
* 쿠키. |
|||
* `http`: 다음을 포함한 표준 HTTP 인증 시스템: |
|||
* `bearer`: `Bearer`의 값과 `Authorization`의 헤더는 토큰에 더해집니다. 이것은 OAuth2에서 상속됩니다. |
|||
* HTTP 기본 인증. |
|||
* HTTP 다이제스트 등. |
|||
* `oauth2`: 보안을 처리하는 모든 OAuth2 방법("흐름"이라고 합니다). |
|||
* 이러한 흐름 중 일부는 OAuth 2.0 인증 공급자(예: 구글, 페이스북, 트위터, 깃허브 등)를 구축하는 데 적합합니다: |
|||
* `implicit` |
|||
* `clientCredentials` |
|||
* `authorizationCode` |
|||
* 그러나 동일한 애플리케이션에서 직접적으로 인증을 처리하는 데 완벽하게 사용할 수 있는 하나의 특정 "흐름"이 있습니다: |
|||
* `password`: 다음 장에서는 이에 대한 예를 다룰 것입니다. |
|||
* `openIdConnect`: OAuth2 인증 데이터를 자동으로 검색하는 방법을 정의하는 방법이 있습니다. |
|||
* 이 자동 검색은 OpenID Connect 명세에 정의되어 있습니다. |
|||
|
|||
|
|||
!!! 팁 |
|||
구글, 페이스북, 트위터, 깃허브 등과 같은 다른 인증/권한 부여 공급자를 통합하는 것도 가능하고 비교적 쉽습니다. |
|||
|
|||
가장 복잡한 문제는 이와 같은 인증/권한 부여 공급자를 구축하는 것이지만 **FastAPI**는 무거운 작업을 대신 수행하면서 쉽게 수행할 수 있는 도구를 제공합니다. |
|||
|
|||
## **FastAPI** 기능 |
|||
|
|||
FastAPI는 이러한 보안 메커니즘의 사용을 단순화하는 `fastapi.security' 모듈에서 이러한 보안 체계 각각에 대한 몇 가지 도구를 제공합니다. |
|||
|
|||
다음 장에서는 **FastAPI**에서 제공하는 도구를 사용하여 API에 보안을 추가하는 방법을 볼 것입니다. |
|||
|
|||
또한 대화형 문서 시스템에 자동으로 통합되는 방법도 확인할 수 있습니다. |
Loading…
Reference in new issue