【发布时间】:2017-01-20 00:59:08
【问题描述】:
我正在开发一个实现用户身份验证的网站(使用 Comeonin 和 Guardian)。
我正在实施电子邮件验证。我想我可以利用 Guardian 中的功能来使用 JWT 令牌生成 url。根据this post,这似乎是一个合理的解决方案(只要 url 使用 https 并且令牌在相对较短的时间内过期)。
这是我目前编写的代码:
def email_verification( user = %User{} ) do
if ( user.email != nil ) do
claims = Guardian.Claims.app_claims
|> Map.put("email", user.email)
|> Guardian.Claims.ttl({1, :hours})
{ :ok, jwt, full_claims } = Guardian.encode_and_sign(user, :email_verification, claims)
Zoinks.Mailer.send_verification_email( user.email, jwt )
end
end
我已将电子邮件地址作为声明放入。这个想法是,一旦用户单击链接,我就可以将“电子邮件”声明与数据库中的电子邮件地址相匹配。
但是,我认为这是一个坏主意 - 特别是因为链接将通过电子邮件以明文形式公开。
按照SO post 中概述的模式,也许我可以生成一个随机数,将其散列(使用 Comeonin),将其存储在用户面前并将其作为我的声明?这是个好主意,还是我完全偏离了轨道?
假设我让这部分解决方案正常工作,是否可以将有效负载类型设置为:email_verification?
【问题讨论】:
-
However, I'm assuming that this is a bad idea - especially since the link will be exposed as clear text via email.到底是什么意思?如果您使用强机密,则使用您的方法 AFAIK 应该没有问题 -
老实说,我不确定 - 我在安全方面缺乏经验
-
我假设如果你收集了足够多的令牌(通过电子邮件的明文),那么就有可能应用彩虹表攻击等技术?如果电子邮件中令牌的安全性受到威胁,那么网站也是如此 - 因为它使用相同的配置
标签: elixir jwt phoenix-framework email-verification