You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iOS端为ArcGIS Runtime SDK嵌入用户凭证访问Portal?

解决方案

ArcGIS Runtime for iOS 通过 AGSAuthenticationManager 全局处理受保护资源的身份验证挑战,你可以通过以下两种方式实现自动注入用户名密码完成验证:

  • 方案1:预注册Portal凭证(适合已知固定账号密码的场景,配置最简单)
    提前给你的企业Portal地址注册凭证,原有地图加载逻辑无需修改,认证管理器会自动匹配请求提交凭证。
import ArcGIS

// 需在加载地图前执行,建议放在App启动或对应页面初始化阶段
let portalRootURL = URL(string: "替换为你的企业Portal根地址,例如https://your-company-portal.com/arcgis")!
// 账号密码建议从iOS钥匙串读取,不要硬编码明文存储
let portalCredential = AGSCredential(user: "你的用户名", password: "你的密码")
AGSAuthenticationManager.shared().credentialCache.add(portalCredential, for: portalRootURL)

// 原有加载地图的代码保持不变即可
let map = AGSMap(url: webmapURL)
mapView.map = map
mapView.touchDelegate = self
mapView.setViewpoint(AGSViewpoint(latitude: 50.69295, longitude: -63.987547, scale: 2027.977411))
  • 方案2:自定义挑战处理回调(适合需要动态获取账号密码、自定义错误提示的场景)
    通过全局挑战处理闭包,拦截所有验证请求,按需返回凭证,适配更灵活的业务场景。
import ArcGIS

// 在App启动阶段全局配置挑战处理逻辑
AGSAuthenticationManager.shared().challengeHandler = { challenge in
    // 只处理账号密码类型的验证挑战,其他类型(如OAuth、证书认证)可按业务需求扩展
    guard challenge.type == .usernamePassword else {
        challenge.cancel()
        return
    }
    // 可在此处插入读取本地存储的账号、弹窗提示用户输入等自定义逻辑
    let userCredential = AGSCredential(user: "用户名", password: "密码")
    // 提交凭证完成验证
    challenge.continue(with: userCredential)
}

// 原有加载地图的代码保持不变即可
let map = AGSMap(url: webmapURL)
mapView.map = map
mapView.touchDelegate = self
mapView.setViewpoint(AGSViewpoint(latitude: 50.69295, longitude: -63.987547, scale: 2027.977411))

注意事项:

  1. 禁止在代码中硬编码明文账号密码,建议将敏感信息存储在iOS钥匙串中,使用时动态读取
  2. 如果企业Portal使用自签名证书,需要提前在认证管理器中配置允许自签名证书,避免请求被系统安全策略拦截
  3. 提交过的凭证会被自动缓存到本地,有效期内无需重复提交

内容的提问来源于stack exchange,提问作者R.LI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:06:01