可以/应该使用IdentityServer4来创建用于用户电子邮件验证的令牌

时间:2017-06-07 08:01:51

标签: asp.net-core asp.net-core-mvc identityserver4

我有用于API身份验证的IdentityServer4设置,尽管我有一个用例,我想验证guest(用户)本质上是一个有效的用户。在我的情况下,有效用户是拥有有效电子邮件地址的任何人,因此我想执行以下操作:

  • 向用户发送一封带有验证令牌的电子邮件(最好是一些混合了他们的电子邮件地址,一些盐和一个到期日
  • 然后,用户可以将此令牌输入我的应用程序,并且“允许”他们继续

我想知道是否可以/应该使用IdentityServer4来实现上述目标?

他们的tools表明你可以生成一个令牌,虽然我对这个主题很新,所以希望得到一些指导。

1 个答案:

答案 0 :(得分:5)

不,Identity Server处理的令牌是access_tokens,它与基于声明的身份验证有关。

您需要用于电子邮件验证的令牌通常称为用户令牌或一次性密码(OTP)。您可以使用这些搜索术语找到有关如何生成/使用这些搜索术语的大量信息,但如果您使用asp UserManager这样的aspnet身份类,则会发现它具有一些内置读取功能。或者,您可以使用UserTokenProvider注册自己的UserManager

一般来说,你会做这样的事情:

  • 使用您的UserTokenProvider获取特定用户的令牌(otp)。 UserManager将使用该用户的安全散列和您自己的“原因”(例如“EmailVerification”)来生成短OTP。
  • 然后,您可以将该OTP包装到一个对象中,该对象包含电子邮件地址,用户ID,以及您喜欢的任何内容。安全Base64编码它(在Identity Server中有一个帮助函数实际上有这个,确保它没有多余的_在最后会混乱HTML链接),把它放在一封电子邮件给用户
  • 用户点击您的链接,将他们带到您的“验证密码”控制器,并将您的混合令牌作为有效负载。您解码它,找出它所针对的用户,让UserManager验证OTP部分是否仍然有效。
  • 工作完成。

如果您希望他们在登录时直接将OTP输入您的应用程序,那么您可以跳过通过电子邮件发送链接的整个混搭部分,并直接通过电子邮件发送简短的OTP。