使用外部身份对用户进行身份验证
本快速入门介绍如何使用 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)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。
在 Google Cloud 控制台的项目选择器页面上, 选择或创建 Google Cloud 项目。
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授予角色的任何项目。
-
创建项目:如需创建项目,您需要 Project Creator 角色
(
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予 角色。
验证是否已为您的 Google Cloud 项目启用结算功能。
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 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:
前往Identity Platform Marketplace页面,在 Google Cloud 控制台中。
点击启用 Identity Platform 。Identity Platform 页面会显示在 控制台中 Google Cloud .
然后,启用 IAP:
前往IAP页面,在 Google Cloud 控制台中。
选择用于 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 保护的客户端应用的项目的项目 ID: Google CloudGoogle Cloud
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 以使用外部身份
前往控制台中的 IAP 页面。 Google Cloud
点击 APPLICATIONS (应用)标签页。
选择您之前部署的示例 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 账号产生费用,请按照以下步骤操作。
- 在 Google Cloud 控制台中,前往 管理资源 页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击 关闭以删除项目。
此外,您可能需要删除自己创建的 Facebook 应用。
后续步骤
- 使用 FirebaseUI 自定义身份验证界面,或从头开始构建自定义界面。
- 详细了解如何使用 Identity Platform 配置身份提供商。
- 了解如何使用 Identity Platform 多租户创建用户和配置的唯一孤岛。