본문 바로가기
API/API 관련 설정 및 라이브러리

회원가입, 로그인시 필요한 인증 토큰 라이브러리

by 하니__ 2024. 5. 22.

인증토큰이라 함은

 

JWT 라고 하는데

이는

JSON Web Token을 의미한다

 

 

회원가입과 로그인시에

보안 및 사용자 인증 관리를 간편하고 효율적으로 처리하기 위해서

사용되는데

크게 아래와 같은 이유로서 사용된다

 

1. 상태 비저장 인증

 

토큰 자체에 사용자의 인증 정보와 권한이 포함되기 때문에

서버는 매번 데이터베이스를 조회하지 않아도 되고

이는 서버의 부하를 줄이고, 확장성을 높이기 때문이다

 

2. 안전한 정보 교환

 

JWT는 기본적으로 서명되어 있어 데이터의 무결성을 보장하기에

토큰이 발급된 후 변경이 되지 않았음을 확인할 수 있다

 

3. 발행된 토큰은 클라이언트가 저장

 

사용자가 여러 브라우저 탭을 열거나

새로 고침을 하더라도 세션을 유지할 수 있게 해주며,

 

클라이언트 측에서 쉽게 접근할 수 있기 때문에

API 호출 시마다 토큰을 포함하여 인증을 처리할 수 있다

 

4. 자동 만료

 

JWT는 유효 기간을 설정할 수 있어

토큰의 만료를 통해 보안을 강화할 수 있다

만료된 토큰은 재사용할 수 없기 때문에,

세션 하이재킹 등의 위험을 줄일 수 있다

 

예를 들면 모바일뱅킹 어플 등에서 로그인 시간이 10분이

지난다면 자동으로 로그아웃 된다던가 하는

 

바로 그 기능이다

 

 

 

그렇다면 설치와 함께 사용을 해보자

 

JWT 설치
pip install flask-jwt-extended

 

설치를 마친뒤

config.py 수정
# JWT 관련 변수 세팅
JWT_SECRET_KEY = 'dasgh1367dfh'
JWT_ACCESS_TOKKEN_EXPIRES = False
PROPAGATE_EXCEPTINS = True

을 추가해 준다

 

첫번째의 변수는

JWT 토큰을 서명하는 데 사용되는 비밀 키

서버는 이 키를 사용하여 JWT를 생성하고 서명하며

클라이언트로부터 받은 JWT를 검증할 때도 이 키를 사용한다

비밀 키는 절대 노출되어서는 안 되며

충분히 복잡하고 예측할 수 없는 값으로 설정해야 한다.

 

두번째의 변수는

JWT 액세스 토큰의 만료 시간을 설정

만약 False로 설정하면 액세스 토큰은 만료되지 않도록 설정된다

 

만약 시간 설정을 하고 싶다면 

False 대신 True로 입력후

 

사용할때 아래와 같이 사용하면 되겠다

access_token = create_access_token(user_id,
expires_delta = datetime.timedelta( minutes = 3 ) )

timedelta(minutes=30)
timedelta(hours=1)
timedelta(days=7)

이런 식으로 입력하면 되겠다

 

세번째 변수는

Flask 애플리케이션에서 발생한 예외를 전파할지 여부를 설정

True로 설정하면, 예외가 발생했을 때 Flask 애플리케이션은 이를 잡아서 처리하지 않고 전파합니다.

이는 디버깅 목적으로 유용할 수 있으며

특히 개발 환경에서 오류의 원인을 빠르게 찾는 데 도움이 됨

 

app.py 설정

 

app = Flask(__name__)

# 환경변수 세팅
app.config.from_object(Config)
# JWT 매니저 초기화
jwt = JWTManager(app)

app = flask~ 아래에

추가해준다

 

config을 추가했으니 세팅을 해주고

 

jwt = JWTManager(app)를 통해

 

JWT 관련 기능을 사용할 수 있는 객체를 생성할수 있고

JWT와 관련된 여러 설정과 기능이 추가되고

JWT매니저를 초기화하고, 인증 및 권한 부여한다

이는 토큰 생성, 토큰 검증, 토큰 갱신 등의 기능을 포함한다

 

 

user.py 수정

 

access_token = create_access_token(user_id)

# 7. 응답할 데이터를 JSON으로 리턴
return {"result" : "success", "access_token" : access_token }

 

 

이후 회원가입 하려고 한다면

 토큰을 발급 받는다