在 Okta 中实施电子邮件验证

Posted

技术标签:

【中文标题】在 Okta 中实施电子邮件验证【英文标题】:Implementing e-mail verification in Okta 【发布时间】:2017-03-13 21:12:55 【问题描述】:

我们将 Okta 用作 IDM 提供商,并试图确定如何实现我们目前用于我们的一个应用程序的特定用例。以下是当前的申请流程:

    用户进入网站 用户输入电子邮件和密码以创建帐户 一封电子邮件将发送到步骤 2 中输入的地址,其中包含验证链接 用户点击链接,IDM 系统将其标记为已验证 用户现在可以使用在步骤 2 中输入的凭据登录系统

当我们查看 Okta 用户创建流程时,我们只看到针对以下两个流程/API 调用发送的电子邮件: 1. 创建没有凭据或恢复问题的用户; 2. 创建有恢复问题的用户。

所有其他流程(至少是我们知道的流程)使用凭据创建用户并立即激活用户并允许在不发送电子邮件的情况下登录。

上述场景可以在 Okta 中通过 API 调用的组合创建吗?基本上,我们可以创建一个用户并将其保持为“暂存”,直到他们点击验证电子邮件?或者这是一个高度定制的场景?此外,我们没有使用多重身份验证,因此我们没有这个选项。

谢谢!

【问题讨论】:

【参考方案1】:

看起来 sendEmail 参数可能未包含在对生命周期/激活的调用中。

生命周期/活动端点名称可能会令人困惑,它开始激活它实际上并没有激活用户。如果使用 sendEmail 强制进行电子邮件验证,用户会收到带有嵌入一次性令牌的链接。令牌将返回给 Okta,通常是单击链接,也可以通过 API 返回。一旦收到令牌,用户就会被激活。

使用一次性令牌来验证电子邮件地址,流程应该完全按照上面的要求工作。参考:https://developer.okta.com/docs/reference/api/users/#activate-user。

【讨论】:

【参考方案2】:

执行第二次调用 /api/v1/users/userId_from_last_call/lifecycle/activate 在激活用户之前不会验证用户。

我需要的是

1) User creates an account with their email and password

2) Account is staged

3) Verification email is sent with activate link

4) User account only get activated by clicking the link

似乎无法找到一种方法来完成这个简单的解决方案

【讨论】:

【参考方案3】:

您可以使用两个 API 调用来实现此目的。首先是使用凭据创建用户并将 url 中的激活参数设置为 false。这将创建具有凭据的用户,但用户的状态将是 STAGED。使用用户 ID 进行第二次调用,即激活用户并将 url 中的 sendEmail 查询参数设置为 true。这将激活用户并将激活电子邮件发送到用户的主电子邮件地址。

请参阅下面的两个调用。

POST /api/v1/users?activate=false


  "profile": 
    "firstName": "firstName",
    "lastName": "lastName",
    "email": "email",
    "login": "login"
  ,
  "credentials": 
    "password" :  "value": "password$" 
  

用户将被创建,状态 = STAGED。从此调用中获取用户 ID。使用此用户 ID 进行第二次调用。

POST /api/v1/users/userId_from_last_call/lifecycle/activate?    sendEmail=true

请注意,第二次调用会将用户的状态设置为 ACTIVE,并将激活电子邮件发送到用户的电子邮件地址。点击链接用户将被提示选择安全图像(如果尚未设置,则恢复问题)。

如果用户使用电子邮件地址登录而不是单击激活电子邮件,则会提示用户以相同的方式设置安全图像/问题。

【讨论】:

谢谢!感谢您的意见。我确实对此进行了实验,唯一悬而未决的问题是激活时间。理想情况下,帐户会在用户单击电子邮件中的链接时激活,但这可能会或可能不会成为问题。

以上是关于在 Okta 中实施电子邮件验证的主要内容,如果未能解决你的问题,请参考以下文章

从 jQuery 中的现有电子邮件和密码数组中验证电子邮件和密码

Okta登录小部件获取名称和头像

在 Firebase 中实施自定义身份验证的工作流程是啥?

Flutter:使用谷歌身份验证在 Firebase 存储中实施任何身份验证失败

在firebase中实现电话和电子邮件身份验证的最佳方法是一次性使用?

PHP Swift 邮件程序设置