ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

God‘s Eye View Google Places 代理设计:浏览器密钥与服务端密钥如何分工

God‘s Eye View Google Places 代理设计:浏览器密钥与服务端密钥如何分工 Gods Eye View Google Places 代理设计浏览器密钥与服务端密钥如何分工【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-viewGods Eye View 是一个运行在浏览器里的间谍卫星模拟器——在照片级 3D 地球上看真实数据实时航班、船舶、卫星、地震、公共摄像头。其中地点搜索搜索机场、地标并飞过去依赖 Google Places API但 API 密钥不能全部丢进浏览器。本文拆解它的 Google Places 代理设计浏览器密钥与服务端密钥如何分工以及为什么这样拆更安全、更省钱。为什么 Places 请求必须走服务端代理先明确一条安全金律见 SECURITY.md携带密钥的 API 调用密钥必须留在服务端。浏览器里能公开的密钥只有两把Google Maps 瓦片密钥和 Cesium ion token它们直接注入前端 bundle在开发者工具里可见只能靠限制而非隐藏来保护。而 Places 搜索搜附近地点、按名字搜地标本身不需要在浏览器里发起——由本地开发服务器代理转发即可于是密钥天然可以留在服务端。这就是整个代理设计要解决的问题同一个 Google Cloud 项目里如何让浏览器用的密钥和服务端用的密钥各干各的活且限制方式互不冲突。两把密钥的分工一表看懂环境变量住在哪里负责什么Google Cloud 里的限制方式GOOGLE_MAPS_API_KEY前端 bundle浏览器可见加载 Photorealistic 3D Tiles、前端地理编码HTTP Referrer 限制 API 范围限制GOOGLE_MAPS_SERVER_API_KEY可选仅服务端.envPlaces 附近搜索、文本搜索、Street View 回退IP 限制永远不离开你的服务器两把密钥的关系由 resolveGoogleServerKey() 决定逻辑非常简单优先用GOOGLE_MAPS_SERVER_API_KEY没配就回退到GOOGLE_MAPS_API_KEY单密钥老用户零改动两个都没配 → 整个地点搜索能力静默关闭见下文无密钥体验。这个拆分是可选的设计很贴心单密钥部署继续工作只是那把密钥必须覆盖浏览器和服务端两侧用到的所有 API。代理内部一次地点搜索的完整旅程核心实现在 google.js它注册了两个 Vite 中间件路由/api/google/nearby-places— 以当前视角为圆心搜附近地点半径 25m–5000m按距离排序最多 20 个结果/api/google/text-search— 按名字搜地标如埃菲尔铁塔用视角偏置locationBias把冷门地标锚在正确的城市最多 5 个结果。每个请求经过的关卡无密钥短路先解析密钥没配就直接返回200 { configured: false, places: [] }——这是刻意的设计无密钥时它只是一个空能力而不是一次服务故障浏览器控制台不会报错见 keylessGooglePlacesResponse()。参数校验经纬度必须在 WGS84 合法范围内校验失败返回 400。限流可选的每 IP 限流GEV_RATELIMIT_GOOGLE_PER_MIN触发后返回 429 并附Retry-After: 5且响应体保持places: []的契约前端无需特判。最小化字段请求头里带X-Goog-FieldMask只取名字、地址、坐标、类型——Google Places 新版 API 按字段计费多取一个字段都是成本。响应封顶与脱敏上游失败时返回 502 清洗过的错误信息内部细节不外泄成功响应带Cache-Control: private, max-age300。同目录的 routes.js 是 OSM 路线代理步行/驾车/骑行同样有每 IP 限流、10 秒超时、8MB 响应封顶、跨洲超长路线拒绝等防护是同一个加固代理模式的另一面。拆密钥的真正收益限制方式终于匹配了这是 SECURITY.md 里最精彩的论述浏览器密钥按Referrer限制它是从浏览器加载的服务端密钥按IP限制它永远不会离开你的服务器根本不存在 referrer。如果两件事共用一把密钥你只能二选一要么过度授权referrer 放开要么其中一边直接坏掉。拆开后每把密钥在 Google Cloud 控制台里的限制精确等于它实际干的事浏览器密钥Referrer 限制 只开 Map Tiles / Geocoding服务端密钥IP 限制 只开 Places API Street View Static。配套的单元测试 googleServerKey.test.mjs 验证了三种组合优先用服务端密钥、未拆分时回退、无密钥时保持无密钥。前端如何消费这个代理浏览器侧不需要知道任何服务端细节地图瓦片与地理编码走 createGoogleGeocoder()由注入的浏览器密钥直接请求结果经normalizeGooglePlace()归一化地点上下文这里有什么走本地代理/api/google/nearby-places与/api/google/text-search语音 AI 回答这是什么地方类问题时场景上下文同样来自这套代理。如何配置一分钟上手无密钥即可运行地点搜索静默禁用其余 11 个图层正常工作只配浏览器密钥GOOGLE_MAPS_API_KEY填入.env或应用内POWER UP → Provider Settings面板Pinokio 安装则写入 pinokio/_ENVIRONMENT代理自动回退使用它追求最小权限再加一行GOOGLE_MAPS_SERVER_API_KEY服务端调用即刻切换过去。GOOGLE_MAPS_API_KEY 浏览器密钥Referrer 限制 GOOGLE_MAPS_SERVER_API_KEY 服务端密钥IP 限制可选相关文件清单代理核心server/providers/places/google.js密钥解析server/providers/places/google-key.js、scripts/google-server-key.mjs路线代理server/providers/places/routes.js前端地理编码src/search/google.js安全模型全文SECURITY.md运行时参考docs/CURRENT-STATE.md一句话总结Google Places 代理的设计精髓不是转发请求而是让两把密钥的限制方式各自精确匹配自己的运行环境——浏览器密钥守 Referrer服务端密钥守 IP拆分可选、回退无感、无密钥优雅降级。这套模式可以直接抄给任何前端渲染 后端查库型地图应用。【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表