파이썬과 JWT를 이용한 웹 애플리케이션의 계정 보안 로그인 기록 저장 및 관리 방법

서론

웹 애플리케이션에서 사용자 계정의 보안을 유지하고 관리하기 위해서는 로그인 기록을 저장하고 관리하는 것이 중요합니다. 이를 위해 파이썬과 JWT(JSON Web Token)를 함께 사용하여 간단하고 안전한 로그인 기록 저장 및 관리 방법을 소개하겠습니다.

JWT란 무엇인가요?

JWT는 웹 애플리케이션 간에 안전한 정보를 전송하기 위해 사용되는 토큰 기반의 인증 방식입니다. JWT는 서버에서 생성되어 클라이언트에게 전달되며, 클라이언트는 이 토큰을 사용하여 인증을 요청하거나 정보를 전송할 수 있습니다. JWT는 정보를 암호화하여 안전하게 전송하므로 훌륭한 인증 방식으로 사용됩니다.

로그인 기록 저장하기

가장 먼저 할 일은 로그인 기록을 저장할 데이터베이스를 설정하는 것입니다. 예를 들어 MySQL 데이터베이스를 사용한다고 가정해봅시다. 파이썬에서 MySQL과 연결하기 위해 mysql-connector-python 모듈을 사용할 수 있습니다.

import mysql.connector

# MySQL 연결 설정
mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="databasename"
)

# 로그인 기록 저장 함수
def save_login_history(user_id, login_time):
    cursor = mydb.cursor()
    sql = "INSERT INTO login_history (user_id, login_time) VALUES (%s, %s)"
    val = (user_id, login_time)
    cursor.execute(sql, val)
    mydb.commit()
    cursor.close()

위의 코드는 MySQL에 연결하고, save_login_history 함수를 사용하여 사용자 아이디와 로그인 시간을 login_history 테이블에 저장하는 기능을 수행합니다. 필요에 따라 테이블 구조를 수정하여 다른 정보도 저장할 수 있습니다.

JWT를 사용하여 로그인 기록에 접근하기

로그인 기록에 접근하기 위해서는 클라이언트로부터 전달받은 JWT를 해독하여 사용자 아이디를 추출해야 합니다. 이를 위해 PyJWT 모듈을 사용할 수 있습니다.

import jwt

# JWT 검증 함수
def verify_jwt(jwt_token):
    try:
        payload = jwt.decode(jwt_token, 'secret_key', algorithms=['HS256'])
        return payload['user_id']
    except jwt.ExpiredSignatureError:
        return 'expired'
    except jwt.InvalidTokenError:
        return 'invalid'

위의 코드는 전달받은 JWT를 검증하여 유효한 토큰인 경우 사용자 아이디를 반환하고, 만료된 토큰인 경우 ‘expired’, 잘못된 토큰인 경우 ‘invalid’를 반환합니다.

# JWT 검증 예제
jwt_token = 'your_jwt_token_here'
user_id = verify_jwt(jwt_token)
if user_id == 'expired':
    print('토큰이 만료되었습니다.')
elif user_id == 'invalid':
    print('잘못된 토큰입니다.')
else:
    print('사용자 아이디:', user_id)

결론

이렇게 파이썬과 JWT를 사용하여 웹 애플리케이션의 계정 보안 로그인 기록을 저장하고 관리할 수 있습니다. 로그인 기록을 데이터베이스에 저장하고 JWT를 사용하여 사용자를 인증하는 방법은 보안에 강력한 방법입니다. 이를 통해 웹 애플리케이션의 보안을 한 단계 높일 수 있습니다.

#보안 #JWT