2017-04-07 1 views
2

J'essaye d'écrire un programme qui connectera un utilisateur par programmation dans un portail ArcGIS.Portail ArcGIS - connexion au code sans invite

Voici mon scénario:

journaux utilisateur dans l'application A, l'utilisateur clique sur un lien vers le portail ArcGIS - Je ne veux pas qu'ils aient à se connecter au portail quand ils cliquent sur ce lien, car qui ont déjà connecté à l'application A.

SO

Nous voudrions:

logs d'utilisateur dans l'application a, l'utilisateur clique sur un bouton contenant le lien de portail comme argument et redirige l'application B. enregistre application B la tu ser dans le portail et les redirige avec le lien de l'application A - l'utilisateur est redirigé sans être invité à se connecter.

Le portail utilise l'authentification de niveau portail et j'utilise javascript mais je pourrais aussi utiliser .NET/C#

MISE À JOUR:

Ma solution actuelle ressemble à ceci:

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

Cette le code me donne un jeton du service de repos - j'essaie de le stocker a un cookie mais il ne persiste pas.

J'ai également essayé d'utiliser une requête Web C# et un cache d'informations d'identification pour générer les informations d'identification, mais je n'ai pas enregistré le code que j'utilisais.

+1

Qu'avez-vous essayé jusqu'à présent? Stack Overflow n'est pas un service de codage. Vous devez mettre au moins un peu d'effort pour résoudre votre propre problème, avant que les autres ne veuillent aider. S'il vous plaît vérifier comment créer un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) – dparoli

+0

Désolé - Je travaille sur ce depuis un mois et j'ai fatigué plusieurs solutions ne fonctionnent pas . Je vais poster mon code. –

+0

Posté comme http://gis.stackexchange.com/q/235109/115 – PolyGeo

Répondre

2

a résolu le problème:

Ok, donc mon message original n'a pas été loin de ce que je avais besoin. Mon lien manquant était le formatage et les propriétés des cookies.

Il est également important de mentionner que vous ne pouvez pas l'exécuter localement mais que vous devez avoir accès au serveur de portail et qu'il ne fonctionne qu'une fois publié.

DANS LE CODE CI-DESSOUS:

CODAGE COOKIE - est un objet JSON codé URL. Je me suis connecté à mon portail et j'ai simplement copié le format de cookie (en utilisant les outils de développement de chrome) et concaténé le jeton généré dans le cookie et redirigé. AUSSI j'ai dû définir les propriétés de domaine, d'expiration et de chemin du 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; 
      });