微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 JavaScript API 访问 ArcGIS Online 上的安全 FeatureLayer

如何解决使用 JavaScript API 访问 ArcGIS Online 上的安全 FeatureLayer

我正在低代码平台 (Mendix) 中构建网络应用程序。我正在通过 ArcGIS JavaScript API v4.19 将 Web 应用程序与 ArcGIS 在线资源连接起来,这一切都非常顺利。

当我想通过 ArcGIS JavaScript API 加载特定的安全 ArcGIS 在线内容时,挑战就出现了,特别是来自一些受保护的 FeatureLayers。我查看了文档,似乎最好的方法是所谓的“应用程序登录”。为此,我想根据客户端 ID 和客户端密钥设置 OAuth 应用程序登录。有了这两个,我可以通过 AOuth 获得一个有效的令牌,并使用该令牌通过 JavaScript API 将令牌提供给 IdentityManager 来访问内容

这是当前出错的地方,我似乎无法弄清楚在 ArcGIS 在线方面的何处明确可以通过此应用程序登录访问此特定的安全 FeatureLayer,因此目前我收到错误有效的令牌和应用程序 ID 无权访问资源,这是受保护的 FeatureLayer 的端点。

有人知道如何将 ArcGIS Online 中的安全 FeatureLayer 与应用程序登录相关联吗?

EDIT 10-6-2021:添加代码示例

在基于客户端 ID 和客户端机密成功检索服务器端的有效令牌后,我在 ArcGIS JavaScript API 中使用客户端 ID (=AppID) 和令牌,如下所示:

const token = {
    server: "http://www.arcgis.com",userId: <AppID>,token:
        <valid token retrieved via OAuth generatetoken request,ssl: true,expires: 7200
};
IdentityManager.registerToken(token);

在尝试访问受保护的要素层时,只有实现这一点才会给我一个错误

身份管理器:未授权。 “您目前以以下身份登录: 应用程序ID。您无权访问此资源: https://server/someid/arcgis/rest/services/somefeatureserver/FeatureServer/0

我还读到有时可能需要以下内容,因此也添加了:

const idString = JSON.stringify(IdentityManager.toJSON());
console.debug("idString: " + idString);
IdentityManager.initialize(idString);

解决错误,但会再次出现登录弹出窗口。

该层随后声明如下:

const layer = new FeatureLayer({
    // URL to the service
    url: layerObj.layerURLStatic
    deFinitionExpression: queryDeFinition,featureReduction: clusterConfig && { type: "cluster" },popupTemplate: {
        title: "{" + inAttributeTitle + "}",content: [
            {
                type: "fields",// FieldsContentElement
                fieldInfos
            }
        ],actions: [
            {
                title: props.intButtonLabel,id: btnId,className: props.intButtonClass + intButtonIconClass,type: "button"
            }
        ]
    },outFields: ["*"]
});

webMap.add(layer);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。