我在 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 代码中的哪里。
您能告诉我存储密钥的最佳和安全方式是什么吗?
编辑:
我有以下流程:
- 用户注册时填写:first_name, email on /register_account
- 我使用对称密钥加密 JSON: {"first_name": first_name, "email": email} (它给了我一个 URL_SAFE 令牌
- 我通过电子邮件向用户发送链接 /register/
- 当用户点击电子邮件时,我们检索 URL 中的令牌,使用之前相同的对称密钥对其进行解密,并预先填写名字和电子邮件字段,然后用户可以填写密码等字段。
- 我们存储用户
我的问题是如何存储加密/解密过程中使用的对称密钥?