Где хранить ключ, используемый для генерации токена в электронном подтверждении
У меня есть этот исходный код в ruby:
Я пытаюсь построить примерно такой же класс. У меня есть эта конечная точка:
@register_endpoint.route('/', methods=['POST'])
def process_signup_form():
form = InitializeAccountForm(request.form)
if form.validate_on_submit():
email = form.email.data
first_name = form.first_name.data
# TODO add exception if the email doesn't land
response = verify_email_account(first_name, email)
return render_template("auth/register.html", form=form)
else:
return render_template("auth/register.html", form=form)
Это отправляет письмо со ссылкой, включающей токен, созданный с использованием этого класса:
class SecureMessage:
def __init__(self):
self.key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
def encrypt(self, message):
if message:
box = nacl.secret.SecretBox(self.key)
cypher_text = box.encrypt(bytes(message, "utf-8"))
encoded_cypher_text = base64.urlsafe_b64encode(cypher_text)
return encoded_cypher_text
else:
return None
def decrypt(self, token64):
if token64:
token = base64.urlsafe_b64decode(token64)
box = nacl.secret.SecretBox(self.key)
decrypted_token = box.decrypt(token)
return decrypted_token
else:
return None
И у меня есть другая конечная точка, которая должна расшифровать ранее сгенерированный токен:
@register_endpoint.route('/<string:token>', methods=['GET'])
def display_register_form(token):
error = None
decrypted_token = SecureMessage().decrypt(token)
form = RegisterAccountForm(decrypted_token)
return render_template("auth/register.html", form=form, error=error)
Я действительно не знаю, где хранить свой секретный ключ в моей среде фляги, ни где ключ хранится в коде ruby.
Не могли бы вы сказать мне, каков наилучший и безопасный способ хранения моего ключа?
РЕДАКТИРОВАТЬ:
У меня есть следующий поток:
- Регистрация пользователя путем заполнения: имя_почты, адрес электронной почты / register_account
- Я шифрую с помощью симметричного ключа JSON: {"first_name": first_name, "email": email} (это дает мне токен URL_SAFE
- Я отправляю пользователю по электронной почте ссылку / зарегистрироваться /
- Когда пользователь нажимает на электронное письмо, мы получаем токен в URL-адресе, расшифровываем его, используя тот же предыдущий симметричный ключ, и предварительно заполняем поле имени и адреса электронной почты, затем пользователь может заполнить поля, такие как пароль и т. Д.
- Мы храним пользователя
У меня вопрос, как я могу сохранить симметричный ключ, используемый в моем процессе шифрования / дешифрования?
1 ответ
Я бы предложил добавить два поля в вашу пользовательскую таблицу,
verfied
verified_token
Сохраните сгенерированный токен в verified_token
, И когда пользователь проверяет адрес электронной почты, установите verified
в true
,