Я столкнулся с некоторыми проблемами при реализации аутентификации в приложении Flask. Мне нужна помощь, чтобы понять, почему мой токен не сохраняется в базе данных и почему мой закрытый ключ не работает правильно для подписи токенов JWT.
Я использую Flask с PostgreSQL для хранения пользовательские данные и генерировать токены JWT для аутентификации. Однако при попытке сохранить токен в базе данных после регистрации пользователя он сохраняется неправильно. Кроме того, при попытке подписать токены JWT с помощью моего закрытого ключа оказывается, что подпись выполняется неправильно.
Вот соответствующий фрагмент кода:
# Relevant code snippet
# Function to generate token
def generate_token(username, email, expiration_time=20):
# Load the private key
with open('private_key.pem', 'r') as f:
private_key = f.read()
payload_data ={
'username': username,
'email': email,
'exp': int(time.time()) + expiration_time
}
token = jwt.encode(
payload=payload_data,
key=private_key,
algorithm='RS256',
)
return token
# Route for user registration
@user_bp.route('/register', methods=['POST'])
def register_user():
# Extract json data from HTTP request using the get_json() method of the request object
data = request.get_json()
# Check if all mandatory fields are filled, if not return error
required_fields = ['username', 'email', 'password', 'confirm_password']
for field in required_fields:
if field not in data or not data[field]:
return jsonify({'error': f'Field {field} missing or empty!'}), 400
username = data['username']
email = data['email']
password = data['password']
confirm_password = data['confirm_password']
if password != confirm_password:
return jsonify({'error': 'Passwords do not match!'}), 400
try:
conn = connect_db()
cursor = conn.cursor()
# Check if username and email of the user already exist in the database, if so return error
cursor.execute("SELECT * FROM users WHERE username=%s OR email=%s", (username, email))
if cursor.fetchone() is not None:
return jsonify({'error': 'Username or email already exists!'}), 400
# Encryption before insertion into the database
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
# Creation of JWT token
expiration_time = 20 # Token expiration time in 20 seconds
token = generate_token(username, email, expiration_time)
print("token before inserting into db:", token)
# Insert the new user into the database
cursor.execute("INSERT INTO users (username, email, password,token) VALUES (%s, %s, %s, %s) RETURNING *",
(username, email, hashed_password.decode('utf-8'), token))
new_user = cursor.fetchone()
print("token before inserting into db:", token)
conn.commit()
if new_user:
user_data = {
'id': new_user[0],
'username': new_user[1],
'email': new_user[2],
'token': new_user[3]
}
else:
return jsonify({'error': 'Error retrieving user data after registration!'}), 500
except Exception as e:
return jsonify({'error': str(e)}), 500
finally:
if 'conn' in locals():
conn.close()
return jsonify({'success': True, 'message': 'User registered successfully!'}), 201
база данных изображений
При запуске этого кода токен кажется сгенерированным правильно, но он не сохраняется в базе данных. Кроме того, при попытке использовать закрытый ключ для подписи токенов JWT кажется, что подпись выполнена неправильно.
Я ценю любую помощь или предложения по решению этих проблем.
Спасибо.
Я столкнулся с некоторыми проблемами при реализации аутентификации в приложении Flask. Мне нужна помощь, чтобы понять, почему мой токен не сохраняется в базе данных и почему мой закрытый ключ не работает правильно для подписи токенов JWT. Я использую Flask с PostgreSQL для хранения пользовательские данные и генерировать токены JWT для аутентификации. Однако при попытке сохранить токен в базе данных после регистрации пользователя он сохраняется неправильно. Кроме того, при попытке подписать токены JWT с помощью моего закрытого ключа оказывается, что подпись выполняется неправильно. Вот соответствующий фрагмент кода: [code]# Relevant code snippet
# Function to generate token def generate_token(username, email, expiration_time=20): # Load the private key with open('private_key.pem', 'r') as f: private_key = f.read()
# Route for user registration @user_bp.route('/register', methods=['POST']) def register_user(): # Extract json data from HTTP request using the get_json() method of the request object data = request.get_json() # Check if all mandatory fields are filled, if not return error required_fields = ['username', 'email', 'password', 'confirm_password'] for field in required_fields: if field not in data or not data[field]: return jsonify({'error': f'Field {field} missing or empty!'}), 400
if password != confirm_password: return jsonify({'error': 'Passwords do not match!'}), 400
try: conn = connect_db() cursor = conn.cursor()
# Check if username and email of the user already exist in the database, if so return error cursor.execute("SELECT * FROM users WHERE username=%s OR email=%s", (username, email)) if cursor.fetchone() is not None: return jsonify({'error': 'Username or email already exists!'}), 400
# Encryption before insertion into the database hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
# Creation of JWT token expiration_time = 20 # Token expiration time in 20 seconds token = generate_token(username, email, expiration_time) print("token before inserting into db:", token) # Insert the new user into the database cursor.execute("INSERT INTO users (username, email, password,token) VALUES (%s, %s, %s, %s) RETURNING *", (username, email, hashed_password.decode('utf-8'), token)) new_user = cursor.fetchone() print("token before inserting into db:", token) conn.commit()
else: return jsonify({'error': 'Error retrieving user data after registration!'}), 500
except Exception as e: return jsonify({'error': str(e)}), 500 finally: if 'conn' in locals(): conn.close() return jsonify({'success': True, 'message': 'User registered successfully!'}), 201
[/code] база данных изображений При запуске этого кода токен кажется сгенерированным правильно, но он не сохраняется в базе данных. Кроме того, при попытке использовать закрытый ключ для подписи токенов JWT кажется, что подпись выполнена неправильно. Я ценю любую помощь или предложения по решению этих проблем. Спасибо.
Я хочу использовать аппаратный модуль безопасности (HSM) для подписи строки. В частности, я использую для этого ePass3003Auto. Я сохранил сертификат в HSM, у которого есть закрытый ключ. Используя пакет Pkcs11Interop и механизм...
Хорошо, я понимаю, что вопрос, который я задаю, может быть довольно очевидным, но, к сожалению, мне не хватает знаний по этому вопросу, и эта задача кажется мне довольно сложной.
У меня есть токен идентификатора (JWT), возвращенный поставщиком...
Я работаю над созданием сервера проверки лицензионного ключа, который разблокирует часть программного обеспечения. Платформа C++, которую я использую для клиента, имеет встроенную функциональность, которая позволяет серверу отправлять обратно ответ...
Я работаю с API, который возвращает конфиденциальные данные. Эти данные необходимо будет расшифровать на стороне клиента с помощью пары ключей, сгенерированной клиентом.
Ниже приведена полезная нагрузка JSON, которая будет отправлена на сервер. ....
Я работаю с API, который возвращает конфиденциальные данные. Эти данные необходимо будет расшифровать на стороне клиента с помощью пары ключей, сгенерированной клиентом.
Ниже приведена полезная нагрузка JSON, которая будет отправлена на сервер. ....