问题描述
我正在低代码平台 (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 与应用程序登录相关联吗?
在基于客户端 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 (将#修改为@)