ArcGIS门户 - 在没有提示的情况下登录代码

时间:2017-04-07 17:32:47

标签: c# authentication arcgis arcgis-js-api

我正在尝试编写一个程序,以编程方式将用户登录到ArcGIS门户。

以下是我的情景:

用户登录到应用程序A,用户单击指向ArcGIS门户的链接 - 我不希望他们在点击该链接时必须登录门户,因为它已经登录到应用程序A.

SO

我想:

用户登录到应用程序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;
        });

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

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

1 个答案:

答案 0 :(得分:2)

解决方法:

好的,所以我原来的帖子离我需要的地方差不多。我缺少的链接是cookie格式和属性。

另外重要的是要提到你不能在本地运行它,但你必须能够访问门户服务器,它只能在发布后才能运行。

以下代码:

ENCODED COOKIE - 是一个URL编码的json对象。我登录了我的门户网站,只是复制了cookie格式(使用chrome dev工具)并将生成的令牌连接到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;
            });