인증토큰이라 함은
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 }
이후 회원가입 하려고 한다면
토큰을 발급 받는다
'API > API 관련 설정 및 라이브러리' 카테고리의 다른 글
JWT 토큰 설정후 API 수정 (0) | 2024.05.22 |
---|---|
회원가입,로그인시 필요한 라이브러리 패스워드 해싱, 이메일형식 유효검사 (0) | 2024.05.21 |
Mysql Connector 설치 및 사용법 (0) | 2024.05.21 |
API - 포스트맨 body에서 json을 받아 처리하는 법 (0) | 2024.05.20 |
API - Flask 설치, postman 설치 (0) | 2024.05.20 |