C# ArcGIS门户-在代码中登录而不提示
我正在尝试编写一个程序,以编程方式将用户登录到ArcGIS门户 以下是我的设想: 用户登录到应用程序A,用户单击到ArcGIS门户的链接-我不希望他们在单击该链接时必须登录到门户,因为他们已经登录到应用程序A 所以 我想: 用户登录到应用程序A,用户单击包含门户链接作为参数的按钮,并重定向到应用程序B。应用程序B将用户登录到门户,并使用应用程序A的链接重定向用户-用户被重定向而无需提示登录 门户使用的是门户层身份验证,我使用的是javascript,但我也可以使用.NET/C# 更新: 我当前的解决方案如下所示:C# ArcGIS门户-在代码中登录而不提示,c#,authentication,arcgis,arcgis-js-api,C#,Authentication,Arcgis,Arcgis Js Api,我正在尝试编写一个程序,以编程方式将用户登录到ArcGIS门户 以下是我的设想: 用户登录到应用程序A,用户单击到ArcGIS门户的链接-我不希望他们在单击该链接时必须登录到门户,因为他们已经登录到应用程序A 所以 我想: 用户登录到应用程序A,用户单击包含门户链接作为参数的按钮,并重定向到应用程序B。应用程序B将用户登录到门户,并使用应用程序A的链接重定向用户-用户被重定向而无需提示登录 门户使用的是门户层身份验证,我使用的是javascript,但我也可以使用.NET/C# 更新: 我当前的
var url = "https://PORTAL_DOMAIN/portal/sharing/rest/generateToken";
var redirect = "https://PORTAL_DOMAIN/portal/home/webmap/PLACE_I_WANT_TO_REDIRECT_TO";
var params = {
'username': "username",
'password': "password",
'client': "referer",
'referer': redirect,
'expiration': 60,
'f': 'json'
};
$.post(url, params)
.done(function (data) {
var tokenHolder = JSON.parse(data);
var token = tokenHolder.token;
$('body').append(token);
document.cookie("esri_auth", token);
window.location = redirect;
});
这段代码从rest服务中获取一个令牌-我尝试将其存储为cookie,但它不会持久
我还尝试使用C#web请求和凭据缓存生成凭据,但没有保存我使用的代码。解决了这个问题:
好吧,我原来的帖子离我需要的不远了。我缺少的链接是cookie格式和属性
还有一点很重要,您不能在本地运行它,但您必须能够访问portal server,并且它只在发布后才能工作
在下面的代码中:
编码COOKIE-是URL编码的json对象。我登录到我的门户网站,只是复制了cookie格式(使用chrome开发工具),并将生成的令牌连接到cookie中并重定向。我还必须设置cookie的域、过期和路径属性
var url = "https://PORTAL_DOMAIN/portal/sharing/rest/generateToken";
var redirect = "https://PORTAL_DOMAIN/portal/home/webmap/PLACE_I_WANT_TO_REDIRECT_TO";
var params = {
'username': "username",
'password': "password",
'client': "referer",
'referer': redirect,
'expiration': 60,
'f': 'json'
};
$.post(url, params)
.done(function (data) {
var tokenHolder = JSON.parse(data);
var token = tokenHolder.token;
var domain = ".PORTAL_DOMAIN";
document.cookie = "esri_auth=ENCODED COOKIE;expires=Session;domain=" +domain + ";path=/;secure";
window.location = redirect;
});
到目前为止你试过什么?堆栈溢出不是编码服务。在别人愿意帮助你之前,你必须至少付出一些努力来解决你自己的问题。请检查如何创建一个抱歉-我已经为此工作了一个月,已经厌倦了多个解决方案都不起作用。我将发布我的代码。交叉发布为