轻松将现有用户迁移到Auth0

用户迁移是一项可怕的,有时是不可避免的任务,对开发人员而言是困难的,对用户而言不便,而对企业所有者而言则是昂贵的。 需要将用户从一种服务或平台迁移到另一种服务或平台可能有多种原因:您当前使用的身份提供者正在关闭,您的组织不再希望自己管理用户,语言或框架发生了变化以及许多其他原因其他原因。

Auth0旨在提供最佳的身份验证和身份管理平台,该平台易于开发人员使用。 Auth0平台的关键功能是能够将用户从任何现有数据源迁移到Auth0,而无需通过更改密码来给用户带来麻烦。

在本教程中,我们将看看如何做到这一点。 Stormpath是一家提供身份验证即服务的公司,最近被Okta收购。 Okta宣布Stormpath产品将于2017年8月关闭,客户必须在那之前找到新的提供商。 让我们看看如何轻松地将现有的Stormpath用户迁移到Auth0。

使用Auth0轻松进行用户迁移

Auth0允许客户使用自定义数据库连接功能连接到任何自定义数据存储。 顾名思义,此功能允许Auth0验证存储在Auth0外部的用户凭据。 外部数据存储可以是数据库(如MySQL),服务(如Stormpath)或您自己的自定义实现。 通过Auth0仪表板中编写的脚本可以访问这些外部数据源。 自定义数据库连接功能还允许开发人员将使用自定义数据库凭据登录的用户自动导入到Auth0中。 拨动开关即可启用此功能。

为了在将Stormpath用户迁移到Auth0的情况下实现此功能,我们将建立一个自定义数据库连接,并使用Stormpath API将其连接到现有的Stormpath帐户。 用户首次登录时,他们将输入其现有的Stormpath凭据,并且如果成功通过身份验证,我们将自动将该用户帐户从Stormpath迁移到Auth0。 您的用户将无需更改密码或跳过任何其他麻烦,您可以决定从Stormpath移植哪些数据。 下次用户登录时,Auth0将检测到他们已被迁移,并使用其Auth0帐户对其进行身份验证。

迁移图

首先,请先注册一个免费的Auth0帐户。 我们假设您已经拥有一个要迁移用户的有效Stormpath帐户。 即使您没有使用Stormpath,也可以按照本教程进行操作并连接到其他数据存储。

设置具有用户导入功能的自定义数据库连接

创建帐户后,让我们建立一个自定义数据库连接。 在Auth0 管理仪表板中 ,导航到“ 数据库连接”部分。

创建数据库连接

单击创建数据库连接按钮以创建新的数据库连接。 您可以根据自己的喜好命名连接。 现在保留所有默认设置,然后单击“ 创建”按钮以创建连接。

配置数据库

接下来,让我们进入该数据库连接并将其连接到我们的Stormpath帐户。 单击新创建的连接,然后导航到“ 自定义数据库”选项卡。 翻转名为“使用我自己的数据库”的开关,现在将启用数据库操作脚本”部分。 在这里,我们将编写代码以连接到您现有的Stormpath用户数据存储区。

我们将需要编写两个脚本: LoginGet User登录将代理登录过程,而当用户尝试重设密码时,“ 获取用户”将管理查找帐户。

启用自定义数据库

启用我们的自定义数据库功能后,让我们启用导入功能。 默认情况下,自定义数据库连接将允许我们向外部数据库进行身份验证,并且不会将用户导入Auth0。 如果要将用户从外部平台迁移到Auth0,则只需切换一下开关即可。 转到连接的“设置”选项卡,然后翻转名为“将用户导入到Auth0”的开关,即可完成操作。

导入到Auth0

在实现脚本之前,我们要做的最后一步是为默认客户端启用此连接。 当您处于数据库连接状态时,导航至“ 客户端”选项卡,然后翻转开关以启用此客户端的“ 默认连接”如果您已经有一个Auth0帐户,则连接名称可能不同。

启用连接

登录

当用户尝试登录但在Auth0数据库中找不到其帐户时,将执行登录脚本。 在这里,我们将实现将该功能传递给我们的Stormpath用户数据存储区的用户凭据,并查看该用户是否有效的功能。 Auth0为许多常见数据库(例如MongoDB,MySQL和SQL Server以及Stormpath)提供模板。 这些模板提供了一个很好的起点,您可以根据需要自定义它们,也可以从头开始编写自己的模板。

数据库操作脚本在Webtask沙箱中运行,并且是Node.js脚本。 由于我们的教程着重于将Stormpath用户迁移到Auth0,因此下面显示的脚本将适合于使用Stormpath REST API,但是如果您要从其他提供商迁移用户,则可以在此处编写实现或使用另一个实现提供的模板。

让我们看一下Login脚本实现,以了解其工作原理。 我们将利用Stormpath的REST API对用户进行身份验证。

function login(username, password, callback) {
  // Replace the YOUR-STORMPATH-CLIENT-ID with your Stormpath ID
  var url = 'https://api.stormpath.com/v1/applications/{YOUR-STORMPATH-CLIENT-ID}/loginAttempts';
  // Add your Stormpath API Client ID and Secret
  var apiCredentials = {
    user : 'YOUR-STORMPATH-API-ID',
    password: 'YOUR-STORMPATH-API-SECRET'
  }

  // Stormpath requires the user credentials be passed in as a base64 encoded message
  var credentials = new Buffer(username + ':' + password).toString('base64');

  // Make a POST request to authenticate a user
  request({
    url: url,
    method: 'POST',
    auth: apiCredentials,
    json: {
      type: 'basic',
      // Passing in the base64 encoded credentials
      value: credentials
    }
  }, function (error, response, body) {
    // If response is successful we'll continue
    if (response.statusCode !== 200) return callback();
    // A successful response will return a URL to get the user information
    var accountUrl = body.account.href;

    // Make a second request to get the user info.
    request({
      url: accountUrl,
      auth: apiCredentials,
      json: true
    }, function (errorUserInfo, responseUserInfo, bodyUserInfo) {
      // If we get a successful response, we'll process it
      if (responseUserInfo.statusCode !== 200) return callback();

      // To get the user identifier, we'll strip out the Stormpath API
      var id = bodyUserInfo.href.replace('https://api.stormpath.com/v1/accounts/', '');

      // Finally, we'll set the data we want to store in Auth0 and migrate the user
      return callback(null, {
        user_id : id,
        username: bodyUserInfo.username,
        email: bodyUserInfo.email,
        // We set the users email_verified to true as we assume if they were a valid
        // user in Stormpath, they have already verified their email
        // If this field is not set, the user will get an email asking them to verify
        // their account. You can decide how to handle this for your use case
        email_verified: true
        // Add any additional fields you would like to carry over from Stormpath
      });
    });
  });
}

获取用户

当用户尝试重设密码但在Auth0数据库中找不到其帐户时,将执行“ 获取用户”脚本。 “获取用户”脚本与Stormpath数据存储接口,并检查该用户是否存在。 如果该用户确实存在,则将其数据发送回Auth0,在该处迁移用户,并从Auth0发送密码重置电子邮件。 用户确认重置后,就可以使用并可以访问您的应用了。 后续登录将根据Auth0数据库进行身份验证,因为用户的个人资料现在与Auth0存储在一起。

如果您不从Stormpath迁移用户,则Get User脚本也将是您自己的实现。 让我们看一下Stormpath的“获取用户”脚本的模板实现:

function getByEmail(email, callback) {
  // Replace the YOUR-STORMPATH-CLIENT-ID with your Stormpath ID
  var url = 'https://api.stormpath.com/v1/applications/{YOUR-STORMPATH-CLIENT-ID}/accounts';
  // Add your Stormpath API Client ID and Secret
  var apiCredentials = {
    user : 'YOUR-STORMPATH-API-ID',
    password: 'YOUR-STORMPATH-API-SECRET'
  };

  // Make a GET request to find a user by email
  request({
    url: url,
    method: 'GET',
    auth: apiCredentials,
    qs: { q: email },
    json: true
  }, function (error, response, body) {
    if (response.statusCode !== 200) return callback();

    var user = body.items[0];

    if (!user) return callback();

    var id = user.href.replace('https://api.stormpath.com/v1/accounts/', '');

    return callback(null, {
      user_id: id,
      username: user.username,
      email: user.email,
      email_verified: true
      // Add any additional fields you would like to carry over from Stormpath
    });
  });
}

有了这两个脚本,我们就可以进行用户迁移设置了。 为了测试它并确保我们的代码正常运行,让我们构建一个简单的应用程序,该应用程序允许用户登录并通过API请求受保护的资源。 我们将使用Angular构建前端,并使用Spring构建后端。

建立前端

我们将使用Angular 2构建前端。我们将使用Auth0 Angular 2快速入门快速启动和运行。 我们的源代码可以在这里找到。 Auth0为许多流行的语言和框架提供了一套全面的快速入门,SDK和指南。 在这里看到他们。

下载项目后,我们需要设置Auth0凭据。 我们将在auth.config.js文件中进行此操作。 打开文件并更改值,如下所示:

"use strict";
exports.myConfig = {
    // Your Auth0 ClientID.
    clientID: '{AUTH0-CLIENT-ID}',
    // Your Auth0 Domain
    domain: '{YOUR-AUTH0-DOMAIN}.auth0.com'
};

这两个值都可以在Auth0 管理仪表板中找到 。 在仪表板中,只需单击主菜单中的“ 客户端”链接,然后选择注册时创建的默认客户端。 如果您已经具有Auth0帐户,请选择具有数据库连接且启用了自定义数据库的客户端。

配置这些值后,保存文件并运行npm install 。 一旦npm安装了所有必需的依赖项,请通过执行npm start来运行项目。 导航到localhost:3000以查看应用程序的运行情况。

新应用

单击“ 登录”按钮以登录到您的应用程序。 单击登录按钮将调出Auth0 Lock小部件,并要求用户提供其电子邮件和密码。 用户将在此处提供他们的Stormpath电子邮件和密码凭据,如果正确,它们将被登录。如果您还没有可以登录的Stormpath用户帐户,请进入Stormpath仪表板并创建一个帐户。 现在使用您的Stormpath用户凭据登录。

Auth0锁定小部件

请注意,您已立即登录。如果查看来自事务的响应数据,我们将看到该用户与我们导入的其他数据一起来自Stormpath-Users连接。 让我们确保该用户也已迁移到Auth0。 要对此进行检查,我们将导航至Auth0仪表板的“ 用户”部分,现在我们将看到与之登录的用户。

迁移的用户

这意味着我们的迁移是成功的。 现在,该用户已迁移到Auth0。 下次他们登录到应用程序时,我们将根据Auth0的数据库检查其凭据,而不是对Stormpath进行额外的调用。 下面的工作流程图再次说明了该过程。

迁移工作流程图

现在您可能会注意到两个按钮,分别是Call Public APICall Private API 。 让我们构建一个简单的后端,当单击这些链接时将返回数据。 接下来,我们将做。

建立后端

对于我们的后端,我们将构建一个简单的Spring Boot应用程序,该应用程序公开RESTful API。 您可以在此处获取示例应用程序的代码。 要设置该应用程序,您只需要使用您的凭据更新该应用程序。 存储凭据的文件称为auth0.properties,可以在src/main/resources/目录中找到。

编辑文件,如下所示:

auth0.domain: {YOUR-AUTH-DOMAIN}.auth0.com
auth0.issuer: https://{YOUR-AUTH0-DOMAIN}.auth0.com/
auth0.clientId: {YOUR-AUTH0-CLIENT-ID}
auth0.securedRoute: NOT_USED
auth0.base64EncodedSecret: false
auth0.authorityStrategy: ROLES
auth0.defaultAuth0ApiSecurityEnabled: false
auth0.signingAlgorithm: HS256

有了此更新,您应该能够通过运行以下命令来构建应用程序:

mvn spring-boot:run -Drun.arguments="--auth0.secret=YOUR_SECRET_KEY"

如果应用程序构建成功,则可以在localhost:4000上访问API。 我们关心的此应用程序公开的两条路由是/ public和/ secure。 每个人都可以访问/ public路由,而/ secure路由仅在用户通过身份验证并通过正确的凭据后才返回成功的响应。

公开API

后端启动并运行后,请返回到前端应用程序,然后尝试单击两个链接,即Call Public APICall Private API 。 即使未登录也可以访问公用API。对于专用API,需要登录才能调用路由并获得适当的响应。

私人API

我们还使用Angular 2添加了一些动态类。 因此,如果用户已登录,我们会将两个按钮都变为绿色,以表示可以单击它们。

应用已登录

使用Auth0更进一步

希望本文中显示的用户迁移功能对您的用例有所帮助。 这种渐进式迁移非常有用,因为它对最终用户透明。 如果您无法进行逐步迁移,则可以现有的用户数据存储批量导入到Auth0中。 此外,由于我们已经编写了“获取用户”脚本,因此您可以向用户发送大量电子邮件,让他们知道他们需要更改密码,然后单击电子邮件中的链接,将其帐户迁移到Auth0。

既然您已经解决了迁移的麻烦,那么让我们简要地讨论一下Auth0除了身份验证,授权和用户迁移之外还为表带来了什么。 只需轻按一下开关,即可启用Auth0提供的许多功能。 多因素身份验证就是这样的功能之一。 您只需使用开关,即可使用我们内部的MFA解决方案Guardian启用MFA。

如果您已经在使用第三方MFA解决方案或拥有自己的自定义解决方案,则也可以继续使用它。 Auth0 规则可扩展性平台使您可以控制授权工作流程。 在这里,您可以配置任意数量的事件,例如触发第三方MFA,执行渐进性分析等等。

Auth0提供传统的用户名和密码身份验证, 50多个社交网络(包括Google,Facebook和Twitter)的社交连接 ,以及通过Active Directory,SAML,Google Apps等的企业连接

结论

自定义数据库连接和导入用户功能为开发人员提供了一种简便的方法,可将其现有用户迁移到Auth0。 无论这些用户是使用Stormpath还是其他提供商,都只需要实现两个脚本以连接到数据存储即可。 即使您的用户正在缓慢迁移,您也可以利用Auth0提供的所有其他功能,例如多因素身份验证,异常检测等。

如果您受到Stormpath新闻的影响,或者由于其他原因想要迁移用户,并希望轻松完成, 请尝试Auth0 ,注册一个免费帐户,然后立即开始。

From: https://www.sitepoint.com/easily-migrate-existing-users-auth0/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值