본문 바로가기

portfolio

FASTAPI 정적 토큰헤더를 통한 인증

동적토큰 JWT가 아닌 정적토큰 X-Token에 고정된 값을 사용하여 토큰헤더인증을 구현해 보겠다.

 

POST, PATCH, GET에 대한 토큰 헤더를 넣음으로써 토큰헤더인증을 통해 요청을 완료한다.

 

 

1. 토큰 생성 

fake_secret_token = "hongsun"

 

 

2. 질문생성 POST요청 

# 질문 생성
@app.post("/questions/", response_model=QuestionCreate)
async def create_question(question: QuestionCreate, x_token: Annotated[str,Header()]):
    if x_token != fake_secret_token:
        raise HTTPException(status_code=400, detail="유효하지 않은 X-TOKEN header")
    question_obj = Question(**question.dict())
    await question_obj.insert()
    return question_obj

 

파라미터에 토큰을 넣을 수 있다.

 

토큰이 틀리면 에러메시지가 출력된다.

 

토큰헤더인증을 통해 질문생성을 완료

 

 

 

3. 질문 수정 PATCH요청

# 질문 수정
@app.patch("/questions/{question_id}/", response_model=QuestionUpdate)
async def update_question(question_id: str, question_update: QuestionUpdate,x_token: Annotated[str,Header()]):
    question = await Question.get(document_id=question_id)
    if x_token != fake_secret_token:
        raise HTTPException(status_code=400, detail="유효하지 않은 X-TOKEN header")
    if not question:
        raise HTTPException(status_code=404, detail="Question not found")

    # 질문 수정
    if question_update.title is not None:
        question.title = question_update.title
    if question_update.description is not None:
        question.description = question_update.description
    await question.save()
    return question

 

 

 

4. 질문 및 답변 조회 GET요청

# 질문 및 답변 조회
@app.get("/questions/{question_id}/", response_model=Question)
async def read_question(question_id: str, x_token:Annotated[str,Header()]):
    question = await Question.get(document_id=question_id)
    if question is None:
        raise HTTPException(status_code=404, detail="질문이 삭제되었거나 새로만드세요",)
    if x_token != fake_secret_token:
        raise HTTPException(status_code=400, detail="유효하지 않은 X-TOKEN header")
    return question