• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

如何使用Auth0的安全、无密码身份验证

在本文中,您将了解如何使用 Auth0 服务设置无密码身份验证。Auth0 允许您为您的应用外包身份验证功能。

什么是 Auth0?

Auth0 是一种身份验证即服务工具,可轻松为您的应用程序或网站实施与身份验证相关的功能。如果您已经构建了一个应用程序并且只想外包身份验证和授权功能,那么您应该考虑使用像 Auth0 这样的服务。

让我快速总结一下 Auth0 提供的功能:

  • 单点登录

  • 多重身份验证

  • 无密码登录

  • 用户管理

  • 以及更多!

初始设置

在本节中,我们将完成初始设置,为设置无密码身份验证做准备。

在继续之前,请确保安装 Composer,因为它将用于使用composer.json文件安装实际的 Auth0 SDK。此外,如果您想按照本文中的示例进行操作,请继续使用 Auth0 为自己获取一个免费帐户。

让我们从获取示例项目的克隆开始。

git clone https://github.com/auth0-samples/auth0-php-web-app.git .

安装依赖项

继续运行composer install命令以安装依赖项。

cd 00-Starter-Seed
composer install

根据composer.json文件,您应该已经安装了vlucas/phpdotenvauth0/auth0-php包。

{
    "name": "auth0/basic-webapp-sample",
    "description": "Basic sample for securing a WebApp with Auth0",
    "require": {
         "vlucas/phpdotenv": "2.4.0",
         "auth0/auth0-php": "~5.0"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "Martin Gontovnikas",
            "email": "martin@gon.to"
        },
        {
            "name": "Germán Lena",
            "email": "german.lena@gmail.com"
        }
    ]
}

vlucas /phpdotenv库用于从.env文件初始化环境变量。因此,它允许您将配置与在环境之间更改的代码分开。

另一方面,auth0/auth0-php包将帮助我们在应用程序中设置授权。

配置环境变量

接下来,让我们在.env文件中为我们的应用设置配置。继续并通过从.env.example文件中复制来创建.env文件。

cp .env.example .env

它包含 Auth0 库将使用的配置值。

AUTH0_CLIENT_ID={CLIENT_ID}
AUTH0_domAIN={DOMAIN_NAME}
AUTH0_CLIENT_SECRET={CLIENT_SECRET}
AUTH0_callback_URL={CALLBACK_URL}
AUTH0_AUDIENCE=

您应该能够在 Auth0 仪表板上的Applications > Default App > Settings下找到大部分设置。请注意,我使用的是系统创建的默认应用程序。当然,如果您愿意,您可以继续创建一个新应用程序。

AUTH0_CALLBACK_URL是您的应用程序的 URL,Auth0 将在登录和注销后重定向用户。您在此字段中设置的值必须 在 Auth0 仪表板上的应用程序设置中的允许回调 URL下进行配置。

使用电子邮件无密码登录

要使用电子邮件启用无密码登录,请转到Auth0 仪表板上的连接 > 无密码并启用电子邮件选项。

在大多数情况下,电子邮件下的默认配置设置 开箱即用。当然,如果您想更改任何设置,请继续执行此操作。不要忘记在Connections > Passwordless > Email > Applications中启用您想要无密码身份验证的应用程序。

完成初始设置后,我们可以继续创建一个使用电子邮件实现无密码登录的文件。

实现无密码登录

继续创建包含以下内容的email_auth_example.php文件。

<?php
  // Require composer autoloader
  require __DIR__ . '/vendor/autoload.php';

  require __DIR__ . '/dotenv-loader.php';

  use Auth0\SDK\Auth0;

  $domain        = getenv('AUTH0_DOMAIN');
  $client_id     = getenv('AUTH0_CLIENT_ID');
  $client_secret = getenv('AUTH0_CLIENT_SECRET');
  $redirect_uri  = getenv('AUTH0_CALLBACK_URL');
  $audience      = getenv('AUTH0_AUDIENCE');

  if($audience == ''){
    $audience = 'https://' . $domain . '/userinfo';
  }

  $auth0 = new Auth0([
    'domain' => $domain,
    'client_id' => $client_id,
    'client_secret' => $client_secret,
    'redirect_uri' => $redirect_uri,
    'audience' => $audience,
    'scope' => 'openid profile',
    'persist_id_token' => true,
    'persist_access_token' => true,
    'persist_refresh_token' => true,
  ]);

  $userInfo = $auth0->getUser();
?>
<html>
    <head>
        <script src="https://code.jquery.com/jquery-3.1.0.min.js" type="text/javascript"></script>

        <meta name="viewport" content="width=device-width, initial-scale=1">

        <!-- font awesome from BootstrapCDN -->
        <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
        <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">

        <link href="public/app.css" rel="stylesheet">
    </head>
    <body class="home">
        <div class="container">
            <div class="login-page clearfix">
              <?php if(!$userInfo): ?>
                <script src="https://cdn.auth0.com/js/lock/11.6.1/lock.min.js"></script>
                <script type="text/JavaScript">
                  function login() {
                    var lock = new Auth0LockPasswordless('<?php echo $client_id; ?>', '<?php echo $domain; ?>', {
                      allowedConnections: ['email'],           // Should match the Email connection name, it defaults to 'email'     
                      passwordlessMethod: 'code',              // If not specified, defaults to 'code'
                      auth: {
                        redirectUrl: '<?php echo $redirect_uri; ?>',
                        responseType: 'code'
                      }
                    });

                    lock.show();
                  }
                </script>

                <a href="javascript:login()">Passwordless Login Using Email</a>
              <?php else: ?>
                <div class="logged-in-box auth0-box logged-in">
                  <h1 id="logo"><img src="//cdn.auth0.com/samples/auth0_logo_final_blue_RGB.png" /></h1>
                  <img class="avatar" src="<?php echo $userInfo['picture'] ?>"/>
                  <h2>Welcome <span class="nickname"><?php echo $userInfo['nickname'] ?></span></h2>
                  <a class="btn btn-warning btn-logout" href="/logout.php">Logout</a>
                </div>
              <?php endif ?>
            </div>
        </div>
    </body>
</html>

一开始,我们已经包含了负责加载 Auth0 和环境变量相关类的自动加载器。

之后,我们使用该函数从.env文件初始化配置变量。getenv

接下来,我们调用了getUserAuth0 对象的方法来检查是否存在任何活动会话。基于此,SignIn如果没有活动会话,我们会显示链接。Logout否则,将显示带有链接的登录用户的用户名。

继续运行email_auth_example.php文件来测试您的应用程序!

使用 SMS 无密码登录

要使用 SMS 启用无密码登录,请转到Auth0 仪表板上的Connections > Passwordless并启用SMS选项。默认情况下,Auth0 使用 Twilio 服务发送消息。因此,继续为自己获取一个 Twilio 帐户。

从 Twilio 仪表板中,获取您的ACCOUNT SIDAUTH TOKEN ,然后在 Auth0 仪表板上的Connections > Passwordless > SMS > Settings的Twilio SIDTwilio AuthToken字段中输入这些值 

此外,您需要在 Twilio 仪表板上的SMS > Messaging services中创建新的消息服务。成功创建服务后,您将获得Service ID,这就是您需要在Connections > Passwordless > SMS > Settings的Copilot SID字段中输入的内容

最后,让我们看一下使用 SMS 进行无密码登录的工作原理。创建 sms_auth_example.php文件。内容与 email_auth_example.php相同,只是login()函数如下。

  function login() {
    var lock = new Auth0LockPasswordless('<?php echo $client_id; ?>', '<?php echo $domain; ?>', {
      allowedConnections: ['sms'],             // Should match the SMS connection name  
        auth: {
          redirectUrl: '<?php echo $redirect_uri; ?>',
          responseType: 'code'
        }
      });
    lock.show();
  };

一切都几乎相同,除了我们提供sms而不是emailallowedConnections属性中提供。

继续运行sms_auth_example.php文件来测试您的应用程序!

结论

今天,我们研究了使用 Auth0 服务的无密码登录。在可用的可能方法中,我们使用代码示例实现了电子邮件和 SMS 方法。


文章目录
  • 什么是 Auth0?
  • 初始设置
    • 安装依赖项
    • 配置环境变量
  • 使用电子邮件无密码登录
    • 实现无密码登录
  • 使用 SMS 无密码登录
  • 结论