使用外部身份对用户进行身份验证

本快速入门介绍如何使用 Identity-Aware Proxy (IAP) 和外部身份保护应用的安全。通过结合使用 IAP 和 Identity Platform,您可以使用各种身份提供商对用户进行身份验证,例如 OAuthSAMLOIDC 以及 Google 账号。

在本快速入门中,您将使用 Facebook 身份验证来保护示例 App Engine 应用。

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

  4. 为您的项目初始化 App Engine:

    gcloud app create --project=project-id
    
  5. 安装 Git

  6. 安装当前版本的 Node.js

  7. 安装 Firebase 命令行工具

    npm install -g firebase-tools
    

启用 API

首先,启用 Identity Platform:

  1. 前往 Google Cloud 控制台中的 Identity Platform Marketplace 页面。

    转到 Identity Platform Marketplace 页面

  2. 点击启用 Identity Platform。Identity Platform 页面会显示在 Google Cloud 控制台中。

然后,启用 IAP:

  1. 前往 Google Cloud 控制台中的 IAP 页面。

    转到 IAP 页面

  2. 选择用于 Identity Platform 的同一项目。不支持使用其他项目。

  3. 点击启用 API

下载并部署示例代码

本快速入门的代码包含两个组件:客户端应用和身份验证应用。

客户端应用受 IAP 保护。当它收到未经身份验证的用户的请求时,会将该请求重定向到身份验证应用以验证用户的身份。如果该用户成功登录,则身份验证应用会返回 JSON Web 令牌 (JWT) 作为响应。出于演示目的,客户端应用会显示 JWT。

首先,下载代码,然后部署客户端应用:

  1. 下载示例代码:

    git clone https://github.com/GoogleCloudPlatform/iap-gcip-web-toolkit.git
    
  2. 转到客户端应用目录:

    cd iap-gcip-web-toolkit/sample/app
    
  3. 安装依赖项:

    npm install
    
  4. 将客户端应用部署到 App Engine:

    npm run deploy
    

    客户端应用将在以下网址启动:

    https://[PROJECT-ID].appspot.com
    

接下来,部署身份验证应用:

  1. 转到身份验证应用的目录:

    cd ../authui-firebaseui
    
  2. 安装依赖项:

    npm install
    
  3. 配置身份验证应用以使用 Firebase 托管。指定包含 IAP 保护的客户端应用的 Google Cloud 项目的 Google Cloud 项目 ID:

    firebase use project-id
    
  4. 部署应用:

    npm run deploy
    

    身份验证应用会在以下网址启动:

    https://[PROJECT-ID].firebaseapp.com
    

您已经部署了客户端和身份验证应用!下一步是配置 Identity Platform 和 IAP。

设置 Identity Platform

IAP 使用 Identity Platform 来对外部身份进行身份验证。本快速入门以 Facebook 为例,但是 Identity Platform 支持各种身份提供商。

创建 Facebook 应用

要使用 Facebook 验证用户身份,您需要一个应用 ID 应用密钥。

  1. 登录到 Facebook for Developers。如果您还没有 Facebook 账号,则需要创建一个。

  2. 转到 Facebook 的应用页面。

  3. 点击添加新应用

  4. 在左侧菜单中,选择设置 > 基本

  5. 隐私权政策网址框中,输入任何有效的网址。如果稍后将应用部署到生产环境中,则可以更新该网址以指向您的隐私权政策。

  6. 记下您的应用 ID 和应用密钥。在下一部分中,您会用到它们。

将 Facebook 添加为身份提供商

配置 Identity Platform 以使用 Facebook 进行身份验证:

  1. 转到 Google Cloud 控制台中的 Identity Providers(身份提供商)页面。

    转到“身份提供商”页面

  2. 点击添加提供商

  3. 从提供商列表中选择 Facebook

  4. 输入您在上一部分中获得的应用 ID 和应用密钥。

  5. 点击保存

配置 OAuth 重定向 URI

当 Facebook 处理完身份验证应用的请求后,它需要重定向到 URI。

  1. 返回 Facebook 的应用页,然后选择您的应用。

  2. 在左侧菜单中,点击产品

  3. 找到 Facebook 登录产品,然后点击设置

  4. 在左侧的导航菜单中,选择设置(您无需完成作为指导的快速入门流程)。

  5. 有效的 OAuth 重定向 URI 框中,输入重定向 URI:

    https://project-id.firebaseapp.com/__/auth/handler
    

    您也可以在 Identity Platform 提供商配置页面中找到此 URI。

  6. 点击保存更改

您已经完成了 Identity Platform 的设置!现在,您可以配置 IAP 以将其用于身份验证。

启用 IAP 以使用外部身份

  1. 前往 Google Cloud 控制台中的 IAP 页面。

    转到 IAP 页面

  2. 点击应用标签页。

  3. 选择您之前部署的示例 App Engine 应用。已发布类别中的网址应类似于:

    https://project-id.appspot.com
    
  4. 在 IAP 列中,将开关切换为开启

  5. 在侧边栏中,点击使用外部身份进行授权对应的开始

  6. 登录页面下,选择我将提供自己的登录页面

  7. 身份验证网址字段中,输入身份验证应用的网址。该网址看起来应该如下所示:

    https://project-id.firebaseapp.com/
    

    输入该网址 后,Google Cloud 控制台会自动附加您的 API 密钥。

  8. 选中带有您的项目名称的框。它应该将 Facebook 列为身份提供商。

  9. 点击保存

您已经完成了 IAP 的设置。

测试用户身份验证

如需测试 IAP 是否正在保护您的应用并使用 Facebook 对用户进行身份验证,请执行以下操作:

  1. 在浏览器中转到客户端 App Engine 应用:

    https://project-id.appspot.com
    

    在短暂的加载屏幕之后,您将被重定向到 Identity Platform 登录页面。

  2. 按照屏幕上的提示使用 Facebook 进行身份验证。

  3. 您应该会重定向回客户端应用,该应用将显示 Identity Platform 返回的 JWT。

要完全退出登录,您必须退出自己创建的示例应用, Facebook。您必须退出这两个应用,因为 Firebase 会与 Facebook 建立一个有效时长为一小时的会话。如需了解详情,请参阅管理用户会话

恭喜!您已成功将应用部署到 App Engine,并通过 IAP 和外部身份对其进行了保护。

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

此外,您可能需要删除自己创建的 Facebook 应用。

后续步骤