2017-04-07 36 views
2

我正在尝试编写一个程序,以编程方式将用户登录到ArcGIS门户。ArcGIS门户 - 在没有提示的代码中登录

这里是我的方案:在应用一个

用户登录,用户点击链接到ArcGIS门户网站 - 我不希望他们有登录到门户网站,当他们点击该链接,因为已经登录到应用A.

SO

我想:在向应用程序A

用户登录,用户点击含有门户链路作为参数的按钮以及重定向到应用B.应用B将记录ü ser进入门户并使用应用程序A的链接重定向它们 - 用户将被重定向而不会被提示登录。

门户是利用门户级验证,我使用JavaScript,但我还可以使用.NET/C#

UPDATE:

我目前的解决办法是这样的:

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; 
     }); 

这代码从其他服务中获得一个令牌 - 我尝试存储它有一个cookie,但它不会持续。

我也使用C#Web请求和凭据缓存生成凭证尝试,但我没有保存我使用的代码。

+1

你尝试过这么远吗?堆栈溢出不是一种编码服务。在其他人愿意帮助之前,你必须尽最大努力解决自己的问题。请查看如何创建一个[最小,完整和可验证的示例](https://stackoverflow.com/help/mcve) – dparoli

+0

对不起 - 我一直在为此工作了一个月,并厌倦了多个解决方案都不工作。我会发布我的代码。 –

+0

交叉发布为http://gis.stackexchange.com/q/235109/115 – PolyGeo

回答

2

解决它:

好了,我原来的职位不是远从我所需要的。我缺少的链接是Cookie格式和属性。

也是其重要的一提的是,你不能在本地运行这一点,但你要访问的门户服务器,它只能使用一次公布出来。

在下面的代码:

编码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; 
      });