资讯动态

深入解读 google-api-nodejs-client 的 IAP(Identity-Aware Proxy)客户端模块与版本演进

发布时间:2026/10/15 6:48:56 来源:尧图企业网站定制
后端【免费下载链接】google-api-nodejs-clientGoogles officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included.项目地址https://gitcode.com/gh_mirrors/go/google-api-nodejs-client点击查看免费下载本文聚焦于官方 Node.js 客户端库 google-api-nodejs-client 中iapCloud Identity-Aware Proxy API模块结合其 CHANGELOG.md 的版本演进记录与 v1.ts / v1beta1.ts 的源码实现系统讲解该模块的安装使用方式、资源结构、核心方法、认证方式、运行环境要求以及代码生成机制帮助开发者理解 IAP 客户端库从 v1 到 v17 的完整发展脉络并正确接入使用。一、模块定位与支持状态iap是 google-api-nodejs-client 仓库中针对Cloud Identity-Aware ProxyIAPAPI的客户端封装模块。IAP 的核心职责是控制对运行在 Google Cloud Platform 上的云应用的访问即通过身份感知的方式在请求到达后端应用之前完成认证与授权拦截。按照模块内 README.md 的说明该库目前处于维护模式maintenance modeGoogle 会继续为已有存量应用提供该库的更新但若你是新构建应用或对旧应用进行现代化改造官方建议改用功能更丰富、维护更积极的google-cloud/iap库。因此在选型时需要注意这一官方指引——本模块适合已有存量代码、依赖googleapis/iap的场景。从 package.json 可以看到该模块的元信息为包名googleapis/iap当前版本17.0.1主入口build/index.js编译产物类型声明build/index.d.ts许可证Apache-2.0运行时环境要求node 22.0.0唯一运行时依赖googleapis-common^9.0.0二、版本演进全景v1.0.0 → v17.0.1模块的 CHANGELOG.md 完整记录了自 2021 年 3 月 v1.0.0 以来的每一次发布。梳理其演进可以清晰看到三条主线。2.1 主线一持续跟随上游 API 变更update the API绝大多数版本都包含**iap:** update the API这样的提交。这表明iap模块由**代码生成器generator**根据 Google Discovery API 文档自动生成每当上游 IAP API 定义更新新增字段、方法、枚举或调整参数仓库就会重新运行生成器并发布新版本。例如v1.0.02021-03-18发布时即包含 [55d82c8] 的update the API与 workload identity federation 认证支持v2.x 至 v4.x 期间多次更新 API涉及 brand、identityAwareProxyClients、tunnel destGroups 等资源的字段演进v8.2.3 至 v10.1.02024-2025 年间继续通过update the API跟随上游v12.1.1 / v12.2.0 / v13.1.0 / v14.0.0 / v17.0.1 等版本同样不断刷新 API 定义。2.2 主线二Node.js 运行时版本门槛的反复调整CHANGELOG 中有非常醒目的BREAKING CHANGES记录集中在运行时版本要求上v10.0.0 / v9.0.02025 年upgrade to node 18——将最低 Node 版本提升至 18属于破坏性变更v13.0.0 起多次标注This release has breaking changes主要来自重新运行生成器后的类型/API 变化v16.0.0 / v15.0.0 / v14.0.02026-09Update apiary to minimum Node version of 22——将最低 Node 版本提升至 22issue #4011v17.0.02026-09-14Update apiary to minimum Node version of 22 again - all packagesissue #4020对所有子包统一执行 Node 22 门槛。同时 CHANGELOG 中反复出现add back support for node 18的 Bug Fix说明 2026 年 9 月的一段时间内团队曾在 Node 18 与 Node 22 之间来回权衡最终以 Node 22 作为统一基线。这与当前 package.json 中node: 22.0.0的 engines 声明完全一致。在升级依赖时务必注意Node 18 及以下版本无法满足 v14 之后的版本要求。2.3 主线三基础设施依赖升级v1.0.0 / v2.0.0googleapis-common升级到 v5issue #2497v5.0.0 / v4.0.3googleapis-common升级到 v7v11.0.0 / v1.0.1upgrade googleapis-common to 8.0.0issue #3731v10.0.0 / v9.0.1先行引入googleapis-common8.0.2-rc预发布版当前 v17.0.1 已落在googleapis-common^9.0.0。googleapis-common承担了请求创建createAPIRequest、认证AuthPlus、GoogleAuth、HTTP/2 传输等公共能力其版本号与 Node 运行时门槛联动是决定模块行为的关键底层依赖。三、安装与两种使用方式3.1 独立安装推荐用于存量应用$ npm install googleapis/iap该方式将iap作为独立 npm 包安装主入口指向编译后的build/index.js依赖googleapis-common^9.0.0。适合只需要 IAP API、希望减小依赖体积的应用。3.2 通过 googleapis 全家桶使用若项目已经安装了googleapis主包则无需单独安装直接按 v1.ts 与 v1beta1.ts 中的示例引入const {google} require(googleapis); const iap google.iap(v1);两种方式下实例的初始化都经由 index.ts 中getAPI(iap, versionOrOptions, VERSIONS, this)完成。VERSIONS常量注册了两个版本v1→iap_v1.Iap完整资源模型v1beta1→iap_v1beta1.Iap仅 IAM 策略管理方法export const VERSIONS { v1: iap_v1.Iap, v1beta1: iap_v1beta1.Iap, };3.3 浏览器/Webpack 场景模块同时提供了 webpack.config.js入口为index.ts输出名为Iap、文件名为iap.min.js的浏览器 bundle产出至dist目录。配置通过null-loader屏蔽了crypto、child_process、fs、http2、os、path、zlib等 Node 内建模块并用stream-browserify与buffer的浏览器实现做替换最终以ts-loader编译 TypeScript。运行npm run webpack即可产出浏览器可用版本这是 IAP 客户端在非 Node 环境如前端应用下的接入路径。四、版本选择与资源结构v1iap_v1.Iap类的构造v1.ts暴露了两大资源根this.projects new Resource$Projects(this.context); this.v1 new Resource$V1(this.context);4.1 projects 资源树Resource$Projectsv1.ts包含brands与iap_tunnel两个子资源Resource$Projects$Brandsv1.tsOAuth Brand 管理子资源为identityAwareProxyClientsResource$Projects$Brands$Identityawareproxyclientsv1.tsIAP OAuth Client 管理Resource$Projects$Iap_tunnel$Locations$Destgroupsv1.tsIAP 隧道目标组TunnelDestGroup管理。对应源码中出现的调用形态v1.tsiap.projects.brands.create(...) // 创建 OAuth Brand iap.projects.brands.get(...) // 查询 Brand iap.projects.brands.list(...) // 列出 Brand iap.projects.brands.identityAwareProxyClients.create(...) iap.projects.brands.identityAwareProxyClients.get(...) iap.projects.brands.identityAwareProxyClients.list(...) iap.projects.brands.identityAwareProxyClients.delete(...) iap.projects.brands.identityAwareProxyClients.resetSecret(...) iap.projects.iap_tunnel.locations.destGroups.create(...) iap.projects.iap_tunnel.locations.destGroups.patch(...) iap.projects.iap_tunnel.locations.destGroups.get(...) iap.projects.iap_tunnel.locations.destGroups.list(...) iap.projects.iap_tunnel.locations.destGroups.delete(...)4.2 v1 根资源IAM 策略管理Resource$V1v1.ts提供三个面向 IAP 保护资源的 IAM 方法getIamPolicy获取访问控制策略setIamPolicyv1.ts设置访问控制策略testIamPermissionsv1.ts测试权限。其典型的getIamPolicy调用示例源码自带注释const res await iap.getIamPolicy({ resource: .*, // REQUIRED: 被请求策略的资源名 requestBody: { // { options: {} } }, }); console.log(res.data); // 响应示例 // { bindings: [], etag: my_etag, version: 0 }4.3 v1beta1 版本iap_v1beta1.Iap 仅包含Resource$V1beta1只提供getIamPolicy、setIamPolicy、testIamPermissions三个 IAM 方法面向的是尚未迁移到 v1 的存量 IAP 资源。对只需做 IAM 策略管理的场景v1beta1 是轻量选择对需要完整管理 Brand、OAuth Client、Tunnel DestGroup 的场景应使用 v1。五、核心 Schema 与参数细节来自源码注释5.1 BrandOAuth 品牌Schema$Brand相关字段v1.ts 的请求/响应示例requestBody: { // { // applicationTitle: my_applicationTitle, // name: my_name, // orgInternalOnly: false, // supportEmail: my_supportEmail // } }创建 Brand 时parent必填形如projects/{project_number/id}即 GCP 项目编号或 ID创建出的 Brand 默认为orgInternalOnly: trueinternal only即其下的 OAuth Client 只接受属于同一 Google Workspace 组织的用户请求且创建时处于未审核状态可通过 Google Cloud Console 手动更改 internal only 状态要求项目下尚不存在 Brand且supportEmail必须归调用者所有。5.2 IdentityAwareProxyClientIAP OAuth Client创建请求v1.tsconst res await iap.projects.brands.identityAwareProxyClients.create({ parent: projects/my-project/brands/my-brand, // 必填 requestBody: { // { // displayName: my_displayName, // name: my_name, // secret: my_secret // } }, });parent必填projects/{project_number/id}/brands/{brand}且项目必须属于 G Suite 账户前提Brand 必须已存在且为 internal-only。分页参数Params$Resource$Projects$Brands$Identityawareproxyclients$Listv1.tspageSize每页返回的最大 client 数未指定时默认最多返回 100最大值 1000超过 1000 会被强制收敛为 1000pageToken上一次ListIdentityAwareProxyClients调用返回的分页令牌翻页时其余参数必须与产生该令牌的调用完全一致parent必填projects/{project_number/id}/brands/{brand}。resetSecret方法v1.ts用于重置 client 的 secret其name参数格式为projects/{project_number/id}/brands/{brand}/identityAwareProxyClients/{client_id}5.3 TunnelDestGroupIAP 隧道目标组创建示例v1.tsconst res await iap.projects.iap_tunnel.locations.destGroups.create({ parent: projects/my-project/iap_tunnel/locations/my-location, // 必填 // 还要求提供 destGroupId4-63 字符仅允许 [a-z] 与 - });更新示例patchv1.ts使用的参数v1.tsnameTunnelDestGroup 标识符必须在项目内唯一仅允许小写字母a-z与连字符-updateMask指定要更新的 IAP 设置字段掩码若省略则更新全部设置requestBodySchema$TunnelDestGroup。5.4 IAP 应用级设置AccessSettings / ApplicationSettingsSchema$AccessSettings 与 Schema$ApplicationSettings 定义了 IAP 的访问策略与应用级配置主要字段包括AccessSettingsallowedDomainsSettingsSchema$AllowedDomainsSettings限定允许访问的域名列表、corsSettings跨域请求、gcipSettings第三方身份提供商的 GCIP claims 配置、identitySourcesIAP 可用的身份源仅可配置一个、oauthSettings、reauthSettings重新认证策略、workforceIdentitySettingsworkforce identity federation 及 OAuth 2.0 配置等ApplicationSettingsaccessDeniedPageSettingsSchema$AccessDeniedPageSettings自定义访问被拒时的错误页 URI、是否生成排障 URL、是否启用 remediation token、cookieDomainIAP 生成的 cookie 的 Domain 值非法值在运行时会被忽略、attributePropagationSettings向 IAP 保护的应用传播属性的配置、csmSettingsservice mesh 行为配置。六、认证与请求流程源码级解析每个方法的请求底层都经由googleapis-common的createAPIRequest完成从 v1.ts 可以看到统一的请求参数组装模式const rootUrl options.rootUrl || https://iap.googleapis.com/; const parameters { options: Object.assign( { url: (rootUrl /v1/{parent}/brands).replace(/([^:]\/)\//g, $1), method: POST, apiVersion: , }, options ), params, requiredParams: [parent], pathParams: [parent], context: this.context, }; if (callback) { createAPIRequestSchema$Brand(parameters, callback); } else { return createAPIRequestSchema$Brand(parameters); }要点所有 v1 请求默认指向https://iap.googleapis.com/可通过options.rootUrl覆盖例如指向内部镜像或代理网关每个方法明确声明requiredParams与pathParams如 Brand 相关方法要求parent缺失时会直接报错方法同时支持 Promiseasync/await与 callback 两种调用风格且具备StreamMethodOptions重载以支持流式/HTTP2 响应每个方法支持的标准参数StandardParameters包括auth可传入stringAPI Key 或OAuth2Client/JWT/Compute/UserRefreshClient/BaseExternalAccountClient/GoogleAuth、access_token、alt、callback、fields、key、oauth_token、prettyPrint、quotaUser、uploadType、upload_protocol以及$.xgafv错误格式参数。认证示例来自源码自带注释的推荐写法const auth new google.auth.GoogleAuth({ // Scopes 可以传数组也可以传单个空格分隔字符串 scopes: [https://www.googleapis.com/auth/cloud-platform], }); const authClient await auth.getClient(); google.options({auth: authClient});此外v2.0.0 / v1.0.0 的 CHANGELOG 中记录了auth: adds support workload identity federationissue #2517说明该库在 2021 年起已支持 workload identity federation 认证路径对应BaseExternalAccountClient类型可从 v1.ts 的 import 中看到。七、源码中的调用链与测试依据模块入口src/apis/iap/index.ts通过VERSIONS注册 v1/v1beta1 两个版本并导出authAuthPlus实例版本实现src/apis/iap/v1.ts约 3653 行与src/apis/iap/v1beta1.ts约 708 行均由生成器产出带THIS FILE IS AUTO-GENERATED标记因此不建议手工修改包配置src/apis/iap/package.json声明 Node 22 与googleapis-common^9.0.0浏览器构建src/apis/iap/webpack.config.js版本记录src/apis/iap/CHANGELOG.md可据此做升级前的破坏性变更评估使用状态与替代库指引src/apis/iap/README.md。八、升级注意事项与最佳实践关注 BREAKING CHANGES每次大版本升级前先检查 CHANGELOG.md 中⚠ BREAKING CHANGES区块。当前影响面最大的是 Node 运行时门槛v14 要求 Node 22与googleapis-common大版本v8 → v9带来的传输层行为变化。锁定 Node 版本v17.0.1 要求node 22.0.0CI 与部署环境需同步升级若暂时无法升级请停留在 v13.1.1 之前的版本其 engines 仍支持 Node 18。新项目选型若构建新应用按 README.md 建议改用google-cloud/iap本模块适用于维护存量代码。优先使用 v1v1beta1 仅提供 IAM 三个方法功能覆盖有限需要完整管理 Brand / OAuth Client / Tunnel DestGroup 时应使用google.iap(v1)。充分利用源码注释每个方法在 v1.ts / v1beta1.ts 中都有完整的示例代码、参数说明与响应示例可直接作为 API 使用手册。分页与字段掩码对identityAwareProxyClients.list正确使用pageSize/pageToken对destGroups.patch使用updateMask精准更新省略updateMask将更新全部字段需谨慎。赞分享后端【免费下载链接】google-api-nodejs-clientGoogles officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included.项目地址https://gitcode.com/gh_mirrors/go/google-api-nodejs-client点击查看免费下载相关推荐google-api-nodejs-client 的 certificatemanager 客户端库版本演进CHANGELOG 全量解读1.0.0 → 16.0.1google api nodejs client 的 certificatemanager 客户端库版本演进CHANGELOG 全量解读1.0.0 → 16后端google-api-nodejs-client 中 firebasedynamiclinks 模块的版本演进与 API 实战解读google api nodejs client 中 firebasedynamiclinks 模块的版本演进与 API 实战解读 Firebase Dynam后端google-api-nodejs-client 的 businessprofileperformance 模块版本演进全解读v1.0.0 → v9.0.1google api nodejs client 的 businessprofileperformance 模块版本演进全解读v1.0.0 → v9.0.1后端上一篇UnblockNeteaseMusic本地VIP功能测评解锁付费歌曲新姿势下一篇Clappr国际化方案实现多语言界面与内容适配创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑