如何通过esri js中的javascript api访问安全webscene(无需用户询问凭据)
我在我的arcgis在线门户上创建了一个web场景,并将其托管在那里。现在,我想通过arcgis javascript api v4.1.6加载地图上的webscene,并且我想通过代码传递凭证(就像我可以使用正确的客户端id和客户端密码从argis js api获得的令牌) 下面是我加载web场景的代码如何通过esri js中的javascript api访问安全webscene(无需用户询问凭据),javascript,arcgis,arcgis-js-api,esri-maps,Javascript,Arcgis,Arcgis Js Api,Esri Maps,我在我的arcgis在线门户上创建了一个web场景,并将其托管在那里。现在,我想通过arcgis javascript api v4.1.6加载地图上的webscene,并且我想通过代码传递凭证(就像我可以使用正确的客户端id和客户端密码从argis js api获得的令牌) 下面是我加载web场景的代码 let scene = new WebScene({ portalItem: { // autocasts as new PortalItem() id: "0614ea
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资源代理绕过登录提示。但是,自述文件确实指出,“不允许为了绕过命名用户身份验证(即每个最终用户必须有自己的唯一登录名的原则)而在资源代理中嵌入凭据” 以下是另一种可能的工作流程: 在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);
}
});
var url=”https://www.arcgis.com/sharing/rest/oauth2/token";
var token=“”;
esriRequest(url{
查询:{
客户端id:“”,
客户_机密:“,
授予类型:“客户端凭据”
},
方法:“员额”
})
。然后((响应)=>{
令牌=response.data.access\u令牌;
esriId.registerToken({
服务器:“https://www.arcgis.com/sharing/rest",
令牌:令牌
})
})
.catch((错误)=>{
如果(err.name=='abortorror'){
log(“请求中止”);
}否则{
console.error(“遇到错误”,err);
}
});
关于此工作流,需要注意以下几点:
- 从web添加项目:
- IdentityManager.registerToken:
- request.esriquest: