Can/should IdentityServer4 用于创建用于用户电子邮件验证的令牌

Can/should IdentityServer4 be used to create a token for user-email verification

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

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

他们的 tools 表明您可以生成令牌,尽管我对这个主题还很陌生,所以希望得到一些指导。

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

您需要用于电子邮件验证的令牌通常称为用户令牌或一次性密码 (OTP)。您可以找到大量关于如何使用这些搜索词 generate/consume 这些的信息,但是如果您使用 aspnet 身份 类 例如 UserManager 您会发现它有一些内置的阅读使用。或者您可以使用 UserManager.

注册您自己的 UserTokenProvider

一般来说你会这样做:

  • 使用您的 UserTokenProvider 为特定用户获取令牌 (otp)。 UserManager 将使用该用户的安全散列和您自己的 'reason'(例如 "EmailVerification")来生成短 OTP。
  • 然后您可以将该 OTP 包装到一个对象中,该对象包括电子邮件地址、用户 ID 以及您喜欢的任何内容。对其进行安全的 Base64 编码(Identity Server 中有一个辅助函数实际上具有此功能,确保它末尾没有多余的 _ 会弄乱 HTML links),将它在给用户的电子邮件中
  • 用户点击您的 link,将他们带到您的 'verify password' 控制器,将您的混搭令牌作为有效负载。你解码它,找出它是给哪个用户的,让 UserManager 验证 OTP 部分仍然有效。
  • 任务完成。

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