Fast API JWT Example을 실행보면서 검토할 사항들
토요일.
운동을 가자고 하는 집사람의 요구를 쌩까면서 Java Spring으로 구현했던 JWT와 Python FastAPI에서 Example로 제공하는 JWT를 비교 해 보고 있다.
먼저 알아야 하는 사항
- OAuth2PasswordRequestForm
- OAuth2PasswordBearer
이 두 가지가 무엇인지 정확하게 식별해놓지 않은 상태에서 Example
을 보고 따라하면 통상적으로 하려고 했던것에서 많이 어긋나는 상황이 발생하는듯하다.
OAuth2PasswordRequestForm
아래 이미지 두 개를 보자.
저 오른쪽 노란색 자물쇠가 있는 함수와 없는 함수의 차이를 생각하자.
@app.get("/items_fastapi_jwt/")
async def read_items(token: str = Depends(oauth2_scheme)):
return {"token": token}
저 자물쇠가 나오는 조건은 OAuth2PasswordBearer유형의 Dependency Injection
인 경우 출력되는 것으로 유추된다.
그리고 저 자물쇠를 누르면 아주 이쁘게 생긴 인증정보를 입력 할 수 있는 화면이 나오는데, 이것이 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는 매우 좋은 선택이라고 생각한다.
- 다만. 타 시스템과의 인터페이스에 있어 인증관련 사항들을 바꿔야 한다면, 어떤 선택이 있을 수 있을까?
Enjoy Reading This Article?
Here are some more articles you might like to read next: