如何解决如何通过esri js中的javascript API访问安全的Webscene无需向用户询问凭据
我已经在我的arcgis在线门户上创建了一个Web场景并将其托管在此。现在,我想通过arcgis javascript api v4.1.6将webscene加载到地图上,并希望通过代码传递凭据(例如可以从带有正确的客户端ID和客户端密码的argis js api中获取的令牌)。
这是我用于加载网络场景的代码
let scene = new WebScene({
portalItem: { // autocasts as new PortalItem()
id: "0614ea1f9dd043e9ba157b9c20d3c538" // ID of the WebScene on the on-premise portal
}
});`
let myHeaders = new Headers();
myHeaders.append("Content-Type","application/x-www-form-urlencoded");
var formdata = new FormData();
formdata.append("client_id","");
formdata.append("client_secret","");
formdata.append("grant_type","client_credentials");
formdata.append("expiration","20160");
var requestOptions = {
method: 'POST',headers: myHeaders,body: formdata,redirect: 'follow'
};
let token = await fetch("https://www.arcgis.com/sharing/rest/oauth2/token",requestOptions)
当我想在我的网站上查看地图时,它总是提示一个弹出窗口并询问用户名和密码。所以我很好奇,加载Web场景时是否可以在代码中的某些地方提供令牌?因此它不会询问用户的用户名和密码。
能否请您在ArcGIS API JavaScript v4.1.6中提供一些示例代码?
谢谢!
解决方法
如果您要公开它(据我所知),则可以设置处理服务安全性的代理。 ESRI为类似任务提供了开放资源,请看一下,
,可以使用Esri资源代理绕过登录提示。但是,自述文件确实说:“出于绕过命名用户身份验证的目的(即每个最终用户必须具有自己的唯一登录名的原则),不允许将凭据嵌入资源代理中”。
这是另一种可能的工作流程:
将在https://www.arcgis.com/sharing/rest/oauth2/token处生成的令牌传递到registerToken()中以访问非公共项。这样,在访问Web地图和ArcGIS Online中存储的其他项目或服务器上的资源时,应用程序发出的每个AJAX请求都会转发此令牌。
var url = "https://www.arcgis.com/sharing/rest/oauth2/token";
var token = "";
esriRequest(url,{
query: {
client_id: "<CLIENT_ID>",client_secret: "<CLIENT SECRET>",grant_type: "client_credentials"
},method: "post"
})
.then((response) => {
token = response.data.access_token;
esriId.registerToken({
server: "https://www.arcgis.com/sharing/rest",token: token
})
})
.catch((err) => {
if (err.name === 'AbortError') {
console.log('Request aborted');
} else {
console.error('Error encountered',err);
}
});
关于此工作流程的一些注意事项:
- 非公开项目必须由生成客户ID和机密的同一用户拥有。
- 网络地图/场景上的图层必须是公开的,也必须由生成客户端ID和密码的用户拥有。就是说,如果您确实需要包括另一个用户创建的非公共层,则可以使用以下工作流创建引用该层的项目,然后将该新项目添加到网络地图/场景-
相关文档:
- IdentityManager.registerToken:https://developers.arcgis.com/javascript/latest/api-reference/esri-identity-IdentityManager.html#registerToken
- request.esriRequest:https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。