토요일.

운동을 가자고 하는 집사람의 요구를 쌩까면서 Java Spring으로 구현했던 JWT와 Python FastAPI에서 Example로 제공하는 JWT를 비교 해 보고 있다.

먼저 알아야 하는 사항

  • OAuth2PasswordRequestForm
  • OAuth2PasswordBearer

이 두 가지가 무엇인지 정확하게 식별해놓지 않은 상태에서 Example을 보고 따라하면 통상적으로 하려고 했던것에서 많이 어긋나는 상황이 발생하는듯하다.

OAuth2PasswordRequestForm

아래 이미지 두 개를 보자.
1
저 오른쪽 노란색 자물쇠가 있는 함수와 없는 함수의 차이를 생각하자.

@app.get("/items_fastapi_jwt/")
async def read_items(token: str = Depends(oauth2_scheme)):
    return {"token": token}

저 자물쇠가 나오는 조건은 OAuth2PasswordBearer유형의 Dependency Injection인 경우 출력되는 것으로 유추된다.

2
그리고 저 자물쇠를 누르면 아주 이쁘게 생긴 인증정보를 입력 할 수 있는 화면이 나오는데, 이것이 OAuth2PasswordRequestForm의 정체이다.

OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")

FastAPI에서 제공하는 JWT를 검토함에 있어서 제일 혼동 될 수 있는 부분은 OAuth2PasswordBearer라고 생각한다. scheme라는 단어에서 눈치를 챌 수 있어야 하는데, FastAPI가 미리 만들어 둔 구조와 변수명으로 읽어 들이겠다는 것이다.

  • username과 password는 고정이다. username을 userid로 바꾸고 싶다면..
  • [인증 > Response Header > 다른함수 > Request Header]로 저장되는 Token String의 Key값은 Authorization이다. 이 것을 바꿔야 한다면..

결론

  • FastAPI가 제공하는 JWT Sample을 아주 훌륭하다 생각한다.
  • FastAPI의 강점인 docs기능을 활용함에 있어서 OAuth2PasswordRequestForm는 매우 좋은 선택이라고 생각한다.
  • 다만. 타 시스템과의 인터페이스에 있어 인증관련 사항들을 바꿔야 한다면, 어떤 선택이 있을 수 있을까?

Read Count