스택큐힙리스트

Swagger UI를 사용하여 FastAPI를 통해 인증 헤더를 보내는 방법은 무엇인가요? 본문

카테고리 없음

Swagger UI를 사용하여 FastAPI를 통해 인증 헤더를 보내는 방법은 무엇인가요?

스택큐힙리스트 2024. 1. 27. 12:49
반응형

다음 엔드포인트로 POST 요청을 보내는 FastAPI 백엔드:에 대한 코드입니다.


@app.post(/api/queue/upload_form_data/)
async def upload_form_data(
email: str = Body(...),
form_info: str = Body(...),
authorization: str = Header(...),

):
return 'form data processing'

그러나 다음과 같은 오류가 발생합니다:



  1. 프론트 엔드에서:


    POST http://localhost:8000/api/queue/upload_form_data/ 422 (처리할 수 없는 엔티티)
    Uncaught (in promise) Error: 잘못된 요청 형식


  2. 백엔드에서:


    POST /api/queue/upload_form_data/ HTTP/1.1 400 잘못된 요청


  3. Swagger UI에서 (응답 본문):


    {
    detail: [
    {
    loc: [
    header,
    authorization
    ],
    msg: 필드가 필요합니다,
    type: value_error.missing
    }
    ]
    }


이 요청에 문제가 있는 것은 무엇인가요? 이 에러들을 일으키는 원인은 무엇인가요?

답변 1

해결책 3


from fastapi import FastAPI, Security
from fastapi.security.api_key import APIKeyHeader
app = FastAPI()
api_key_header = APIKeyHeader(name='Authorization')
@app.get('/')
def main(api_key: str = Security(api_key_header)):
return api_key

대안적으로, 원하는 헤더에 name을 사용하여 APIKeyHeader를 사용할 수도 있습니다. 이를 통해 Swagger UI에서 Authorize 버튼을 클릭하여 헤더 값을 설정할 수도 있습니다.

다른 해결책은 authorization Header 매개변수의 이름을 다른 것으로 변경하는 것입니다. 예를 들어 token으로 변경하고, 이 매개변수를 API 엔드포인트에서 Optional으로 정의합니다. 그런 다음 엔드포인트 내에서 token 또는 request.headers.get('Authorization') 매개변수에 API 키가 있는지 확인합니다. 두 가지 모두 None을 반환한다면, 이는 토큰이 제공되지 않았다는 것을 의미합니다. 예시:


from fastapi import FastAPI, Request, Header
from typing import Optional
app = FastAPI()
@app.get('/')
def main(request: Request, token: Optional[str] = Header(None)):
authorization = request.headers.get('Authorization')
return token if token else authorization

답변 2

Swagger UI를 통해 FastAPI를 사용하여 인증 헤더를 전송하는 방법에 대해 알아보겠습니다. FastAPI는 파이썬 기반의 웹 프레임워크로, Swagger UI는 FastAPI에서 API 문서를 자동으로 생성해주는 강력한 도구입니다. 이 두 가지를 함께 사용함으로써 API 요청에 인증 헤더를 포함시킬 수 있습니다.
인증 헤더를 전송하는 과정은 다음과 같습니다. 먼저 Swagger UI를 설정하고 FastAPI에서 API 엔드포인트를 정의합니다. 그런 다음 해당 엔드포인트에 대한 인증 정보를 포함한 요청을 보내는 방법을 설명해 드리겠습니다.
첫째, FastAPI 프로젝트를 설정해야 합니다. FastAPI는 파이썬 3.7 이상을 필요로 하므로 이에 유의해 주세요. 또한, Swagger UI를 사용하기 위해 fastapi와 uvicorn 패키지를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다.
```
pip install fastapi uvicorn
```
둘째, FastAPI를 사용하여 API 엔드포인트를 만들어야 합니다. 여기에서는 간단한 예제로 사용자 인증을 위한 API를 생성해 보겠습니다. 아래 코드를 프로젝트 파일에 작성하세요.
```python
from fastapi import FastAPI, Depends
from fastapi.security import HTTPBasic, HTTPBasicCredentials
app = FastAPI()
security = HTTPBasic()
@app.get(/api)
def get_api(credentials: HTTPBasicCredentials = Depends(security)):
return {message: 인증에 성공했습니다!}
```
HTTPBasic을 사용하여 사용자 이름과 비밀번호를 검증하는 엔드포인트를 만들었습니다. /api 경로로 GET 요청이 오면 FastAPI는 사용자 이름과 비밀번호를 인증 헤더에서 추출합니다.
셋째, Swagger UI를 설정해야 합니다. FastAPI는 자동으로 Swagger UI를 생성합니다. 다음 코드를 사용하여 파일에 추가하세요.
```python
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
app = FastAPI()
@app.get(/openapi.json)
def get_open_api():
return get_openapi(title=API 문서, version=1.0, routes=app.routes)
@app.get(/docs)
async def get_swagger_ui():
return {redirect: /docs/}
@app.get(/docs/)
async def swagger_ui(request: Request):
return get_swagger_ui_html(
openapi_url=/openapi.json,
title=Swagger UI,
oauth2_redirect_url=/docs/oauth2-redirect,
request=request,
)
```
위의 코드는 /docs 엔드포인트에서 Swagger UI를 가져옵니다. /openapi.json 엔드포인트는 OpenAPI 문서를 제공하며, FastAPI의 routes를 이용하여 작성되었습니다.
넷째, Swagger UI를 통해 인증 헤더를 전송할 준비가 되었습니다. FastAPI를 실행시키고, API 문서를 확인할 수 있는 /docs 경로로 이동하세요. Swagger UI가 열리면 Try it out 버튼을 클릭하여 API 엔드포인트를 테스트할 수 있습니다.
Authorization 헤더를 사용자 이름과 비밀번호로 설정하려면 아래의 예제처럼 입력하세요.
```
{ Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= }
```
여기서 dXNlcm5hbWU6cGFzc3dvcmQ=는 사용자 이름과 비밀번호인 username:password를 base64로 인코딩한 값입니다.
마지막으로, 헤더를 올바르게 입력했는지 확인하고 Execute 버튼을 클릭하세요. FastAPI는 요청을 받아들이고 인증 헤더를 확인한 후, 인증에 성공했습니다! 라는 메시지를 반환합니다.
이처럼 FastAPI와 Swagger UI를 함께 사용하여 인증 헤더를 전송하는 방법을 알아봤습니다. FastAPI는 안정적이고 강력한 웹 프레임워크이며, Swagger UI는 API 문서를 자동으로 생성해주어 개발과 문서화를 편리하게 해줍니다. 이 두 가지를 적절히 활용하여 더욱 원활한 API 테스트와 개발을 진행할 수 있습니다.

반응형
Comments