使用外部身份对用户进行身份验证
本快速入门介绍如何使用 Identity-Aware Proxy (IAP) 和外部身份保护应用的安全。通过结合使用 IAP 和 Identity Platform,您可以使用各种身份提供商对用户进行身份验证,例如 OAuth、SAML 和 OIDC 以及 Google 账号。
在本快速入门中,您将使用 Facebook 身份验证来保护示例 App Engine 应用。
准备工作
所需的角色
如需获得完成本快速入门所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
Project Creator (
roles/resourcemanager.projectCreator) -
App Engine Admin(
roles/appengine.appAdmin) -
Firebase Authentication Viewer (
roles/firebaseauth.viewer) -
IAP Policy Admin (
roles/iap.admin) -
Compute Viewer (
roles/compute.viewer) -
Identity Platform Admin (
roles/identityplatform.admin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
Verify that billing is enabled for your Google Cloud project.
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
为您的项目初始化 App Engine:
gcloud app create --project=project-id
安装当前版本的 Node.js。
-
npm install -g firebase-tools
启用 API
首先,启用 Identity Platform:
前往Google Cloud 控制台中的 Identity Platform Marketplace 页面。
点击启用 Identity Platform。Identity Platform 页面会显示在 Google Cloud 控制台中。
然后,启用 IAP:
前往 Google Cloud 控制台中的 IAP 页面。
选择用于 Identity Platform 的同一项目。不支持使用其他项目。
点击启用 API。
下载并部署示例代码
本快速入门的代码包含两个组件:客户端应用和身份验证应用。
客户端应用受 IAP 保护。当它收到未经身份验证的用户的请求时,会将该请求重定向到身份验证应用以验证用户的身份。如果该用户成功登录,则身份验证应用会返回 JSON Web 令牌 (JWT) 作为响应。出于演示目的,客户端应用会显示 JWT。
首先,下载代码,然后部署客户端应用:
下载示例代码:
git clone https://github.com/GoogleCloudPlatform/iap-gcip-web-toolkit.git
转到客户端应用目录:
cd iap-gcip-web-toolkit/sample/app安装依赖项:
npm install将客户端应用部署到 App Engine:
npm run deploy客户端应用将在以下网址启动:
https://[PROJECT-ID].appspot.com
接下来,部署身份验证应用:
转到身份验证应用的目录:
cd ../authui-firebaseui安装依赖项:
npm install export NODE_OPTIONS=--openssl-legacy-provider配置身份验证应用以使用 Firebase Hosting。指定包含受 IAP 保护的客户端应用的 Google Cloud 项目的 Google Cloud项目 ID:
firebase use project-id
部署应用:
npm run deploy身份验证应用会在以下网址启动:
https://[PROJECT-ID].firebaseapp.com
您已经部署了客户端和身份验证应用!下一步是配置 Identity Platform 和 IAP。
设置 Identity Platform
IAP 使用 Identity Platform 来对外部身份进行身份验证。本快速入门以 Facebook 为例,但是 Identity Platform 支持各种身份提供商。
创建 Facebook 应用
要使用 Facebook 验证用户身份,您需要一个应用 ID 和应用密钥。
登录 Meta for Developers。如果您还没有 Facebook 账号,则需要创建一个。
前往 Facebook 的 我的应用页面。
点击创建应用。
在左侧菜单中,选择设置 > 基本。
在隐私权政策网址框中,输入任何有效的网址。如果稍后将应用部署到生产环境中,则可以更新该网址以指向您的隐私权政策。
记下您的应用 ID 和应用密钥。在下一部分中,您会用到它们。
将 Facebook 添加为身份提供商
配置 Identity Platform 以使用 Facebook 进行身份验证:
前往 Google Cloud 控制台中的身份提供商页面。
点击添加提供商。
从提供商列表中选择 Facebook。
输入您在上一部分中获得的应用 ID 和应用密钥。
点击保存。
配置 OAuth 重定向 URI
当 Facebook 处理完身份验证应用的请求后,它需要重定向到 URI。
返回 Facebook 的 我的应用页面,然后选择您的应用。
在左侧菜单中,依次点击商品> 添加商品。
找到 Facebook 登录产品,然后点击设置。
在左侧的导航菜单中,选择设置(您无需完成作为指导的快速入门流程)。
在有效的 OAuth 重定向 URI 框中,输入重定向 URI:
https://project-id.firebaseapp.com/__/auth/handler
您也可以在 Identity Platform 提供商配置页面中找到此 URI。
点击保存更改。
您已经完成了 Identity Platform 的设置!现在,您可以配置 IAP 以将其用于身份验证。
启用 IAP 以使用外部身份
前往 Google Cloud 控制台中的 IAP 页面。
点击应用标签页。
选择您之前部署的示例 App Engine 应用。已发布类别中的网址应类似于:
https://project-id.appspot.com
在 IAP 列中,将开关切换为开启。
在侧边栏中,点击使用外部身份来获得授权对应的开始。
在登录页面下,选择我将提供自己的登录页面。
在身份验证网址字段中,输入身份验证应用的网址。该网址看起来应该如下所示:
https://project-id.firebaseapp.com/
输入该网址后, Google Cloud 控制台会自动附加您的 API 密钥。
选中带有您的项目名称的框。它应该将 Facebook 列为身份提供商。
点击保存。
您已经完成了 IAP 的设置。
测试用户身份验证
如需测试 IAP 是否正在保护您的应用并使用 Facebook 对用户进行身份验证,请执行以下操作:
在浏览器中转到客户端 App Engine 应用:
https://project-id.appspot.com
在短暂的加载屏幕之后,您将被重定向到 Identity Platform 登录页面。
按照屏幕上的提示使用 Facebook 进行身份验证。
您应该会重定向回客户端应用,该应用将显示 Identity Platform 返回的 JWT。
如需完全退出登录,您必须退出您创建的示例应用和 Facebook。您必须同时退出这两个应用,因为 Firebase 会与 Facebook 建立一个有效期为一小时的会话。如需了解详情,请参阅管理用户会话。
恭喜!您已成功将应用部署到 App Engine,并通过 IAP 和外部身份对其进行了保护。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
此外,您可能需要删除自己创建的 Facebook 应用。
后续步骤
- 使用 FirebaseUI 自定义身份验证界面,或从头开始构建自定义界面。
- 详细了解如何使用 Identity Platform 配置身份提供商。
- 了解如何使用 Identity Platform 多租户创建用户和配置的唯一孤岛。