본문 바로가기
Python/FastAPI

[FastAPI ③] JWT 로그인 구현 실습 (Rest API / Bearer with JWT tokens / 쿠키에 토큰 저장)

by 비전공자 기록광 2023. 9. 13.
반응형

이전 글에서 아주 간단한 수준의 회원가입 로그인을 구현했다. 하지만 로그인에 성공하고 나서 처리가 없어 실제로 쓸 순 없다.

그래서 이번엔 JWT 방식으로 로그인에 성공하면 토큰을 부여해주겠다.

 

이전글

➡️ 기본 게시판 CRUD API 구현 실습

2023.07.28 - [Python/FastAPI] - [FastAPI ①]게시판 CRUD API 구현 실습 (SQLAlchemy / Rest API / 예외 처리)

 

[FastAPI ①]게시판 CRUD API 구현 실습 (SQLAlchemy / Rest API / 예외 처리)

FastAPI 기본 게시판 CRUD API 실습 오랜만에 기본 게시판 CRUD API 실습 블로깅을 해본다. 이번에는 Python으로 진행한다. 업무로 FastAPI를 접하고 생각보다 너무 재밌어 다음에는 Django를 공부하고 싶어

datamoney.tistory.com

 

 

또 Spring security JWT 로그인 실습에 대한 내용이 궁금하신 분들은 참고하세요

 

➡️ Spring security JWT 로그인 

2023.01.17 - [Backend/Spring] - [Spring] Spring Security JWT 로그인 구현 (HTTP Basic Authentication / Form Based Authentication / JWT)

 

[Spring] Spring Security JWT 로그인 구현 (HTTP Basic Authentication / Form Based Authentication / JWT)

스프링 시큐리티와 JWT를 이용한 로그인을 구현해보려 한다. ➡️ 개념 정리 2023.01.09 - [Backend/Spring] - [Spring] Spring Security 기본 개념 (JWT / OAuth2.0 / 동작 방식 / 구성 요소) [Spring] Spring Security 기본 개

datamoney.tistory.com

 

1. 로그인시 검증 후 access_token 발급

현재의 로그인 로직은 

1. 회원 존재 여부 확인

2. 확인 후 비밀번호 비교 체크

 

뿐이다.

 

검증은 어느 정도 끝났고 회원 상태가 활성인 회원인지도 체크 후에 엑세스 토큰을 발행하겠다.

 

일단 python에서 jwt를 사용하기 위해서 패키지를 추가해줬다.

# jwt사용
poetry add python-jose

# 환경 변수로 키값 관리
poetry add python-dotenv

 

jwt를 사용하기 위해선

서버측의 비밀키와 알고리즘, 만료 시간을 설정해줘야한다.

이 상수는 민감한 정보이기 때문에 환경변수로 관리하기 위해 python-dotenv를 사용한다.

 

https://pypi.org/project/python-dotenv/

 

python-dotenv

Read key-value pairs from a .env file and set them as environment variables

pypi.org

SECRET_KEY = "fske256d3433kf2@er454ddd!35435rd!!!dkzfefdsdfjldkjf!dxfd5dsfx2432dszdfdsfsfs12xdfds2sa"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 60

 

일단 .env 파일을 만들어

jwt 관련 상수를 선언해준다.

 

그리고 

load_dotenv로 필요한 키들을 가져와 사용한다.

 

 

 

이제 응답에 엑세스 토큰을 담아 보낸다.

 

 

Token을 스키마에 추가해주고

 

리턴에 담아줬다.

 

 

실행해보자

 

access_token이 잘 생성되었다.

 

이제 이걸 어디에 저장할지는 프론트와 협의후 진행하면 된다.

 

2.  쿠키에 access_token 저장

만약 cookie에 저장한다고 하면

Response를 통해 set_cookie를 해주면 된다.

 

 

이렇게 다시 실행해보면 

 

쿠키가 브라우저에 저장이 된다.

 

 

3. 로그아웃

로그아웃도 생성해본다.

 

일단 들어온 요청에 따라 쿠키에서 access_token을 뽑아내 삭제해야한다.

Request를 가져와서 쿠키를 뽑아

해당 이름의 쿠키를 삭제해주면 된다.

 

 

실행해보면

 

access_token이 잘 삭제된 걸 볼 수 있다.

 

 


코드

https://github.com/recordbuffer/TIL/tree/main/FastAPI

 

참고

https://fastapi.tiangolo.com/ko/tutorial/security/oauth2-jwt/

 

OAuth2 with Password (and hashing), Bearer with JWT tokens - FastAPI

FastAPI framework, high performance, easy to learn, fast to code, ready for production

fastapi.tiangolo.com

 

반응형

댓글