asp.net-core - 是否可以/应该使用 IdentityServer4 创建用于用户电子邮件验证的 token

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

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

  • 向用户发送一封包含验证 token 的电子邮件(最好是他们的电子邮件地址、一些盐和过期时间的混合体
  • 然后,用户可以将此 token 输入到我的应用中,并且“允许”他们继续操作

我想知道 IdentityServer4 是否可以/应该用于实现上述目的?

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

最佳答案

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

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

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

  • 使用您的 UserTokenProvider 获取特定用户的 token (otp)。 UserManager 将使用该用户的安全哈希和您自己的“原因”(例如“EmailVerification”)来生成简短的 OTP。
  • 然后,您可以将该 OTP 封装到一个对象中,其中包括电子邮件地址、可能的用户 ID 以及您喜欢的任何内容。对其进行安全 Base64 编码(Identity Server 中有一个辅助函数实际上具有此功能,确保它末尾没有多余的 _ ,这会扰乱 HTML 链接),将其放入发送给用户的电子邮件中<
  • 用户点击您的链接,将其带到您的“验证密码” Controller ,并使用您的混合 token 作为负载。您对其进行解码,找出它是针对哪个用户的,让 UserManager 验证 OTP 部分是否仍然有效。
  • 工作完成。

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

关于asp.net-core - 是否可以/应该使用 IdentityServer4 创建用于用户电子邮件验证的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44406876/

相关文章:

javascript - 将 javascript 图像 blob 保存到 ASP.NET Core Controller

xamarin - 错误 MSB1003 : Specify a project or solution file. 当前工作目录不包含项目或解决方案文件

identityserver4 - 使用 IdentityServer4 限制每个用户的并发 session 数

c# - Azure Function 的流畅验证

c# - Net Core - 将配置应用于框架类

c# - 使用 ASP NET Core 2.0 Razor Pages 进行路由

c# - 在 Controller asp.net-core v1.1.0 之外使用 Dependency Injection 进行应用程序设置

azure - Http header 已删除 Azure Web 应用程序

authentication - Identity Server 4 日志(无效对象名称 'DeviceCodes' )异常

azure - Docker : how to read configmap & secret in asp. 网络核心应用程序?