关于实现自有软件与Esri/ArcGIS Online交互的技术咨询
实现自有软件与Esri/ArcGIS Online交互的可行方案
完全可以实现你描述的交互场景,核心解决无缝身份认证和资产ID传递与数据展示两个关键点,以下是具体落地思路:
一、核心方案概述
用户在SomeRandomSoftwareApp完成登录后,点击Widget内的链接时,由自有软件后台完成ArcGIS Online的身份认证(无需用户重复输入账号密码),获取合法访问令牌后,携带资产ID跳转至ArcGIS Online对应页面或在自有Widget内嵌入展示关联数据。
二、分步实现细节
1. 注册ArcGIS Online应用
首先需要在ArcGIS Online开发者平台注册一个自有软件对应的应用:
- 登录ArcGIS Online,进入「开发者仪表盘」创建新应用
- 配置OAuth 2.0相关参数:设置回调URL(自有软件的合法域名),启用授权码流程(推荐搭配PKCE增强安全性)
- 申请必要权限:比如
item:read(读取资产数据),根据实际需求调整权限范围
2. 无缝身份认证实现
为避免用户重复登录,推荐两种认证方式:
方式1:OAuth 2.0静默授权(通用场景)
- 用户点击Widget链接时,自有软件后台先验证用户在自有系统的登录状态
- 后台发起ArcGIS OAuth授权请求,添加
prompt=none参数实现静默授权(若用户此前已授权过该应用,直接返回授权码;未授权则需引导用户完成一次授权,后续可静默) - 用授权码换取ArcGIS访问令牌(
access_token)和刷新令牌(refresh_token),令牌存储在自有后台,按需使用
方式2:SAML单点登录(企业内部场景)
- 若企业已将ArcGIS Online与自有身份系统(如AD、Okta)配置为SAML集成,用户在自有软件登录后,直接跳转ArcGIS Online时会自动复用SAML会话,无需额外认证
3. 资产ID传递与数据展示
场景A:跳转至ArcGIS Online原生页面
- 拿到访问令牌后,构造ArcGIS资产详情URL,将资产ID和令牌作为参数传入:
https://www.arcgis.com/home/item.html?id={your-asset-id}&token={access_token}
- 用户点击链接后,直接打开新窗口展示对应资产的完整数据,ArcGIS Online会自动验证令牌并完成登录态同步
场景B:在自有Widget内嵌入展示
- 使用ArcGIS JS API在自有Widget中直接渲染资产数据:
// 自有Widget前端代码示例 async function loadEsriAsset(assetId) { // 从自有后台获取ArcGIS访问令牌 const tokenRes = await fetch('/api/get-esri-token', { credentials: 'include' }); const { accessToken } = await tokenRes.json(); // 初始化ArcGIS JS API require(["esri/Map", "esri/views/MapView", "esri/portal/PortalItem"], (Map, MapView, PortalItem) => { const portalItem = new PortalItem({ id: assetId, token: accessToken }); const map = new Map({ portalItem: portalItem }); const view = new MapView({ container: "esri-widget-container", map: map }); }); }
4. 安全注意事项
- 禁止在前端暴露ArcGIS应用的
client_secret,所有令牌获取逻辑必须通过自有后台完成 - 使用PKCE流程配合授权码,防止授权码被拦截盗用
- 合理设置令牌过期时间,利用刷新令牌自动续期,避免用户频繁触发认证流程
三、权限验证
确保ArcGIS Online的目标资产已对应用户/应用开放访问权限:
- 若使用应用级令牌,需将资产共享给该ArcGIS应用的访问权限组
- 若使用用户级令牌,需确保用户账号有权限查看目标资产
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

