Comment accéder à un service d'entités hébergé sur arcgis.com qui n'est partagé qu'avec des groupes ou une organisation particuliers

9

Dans mon application C #, j'essaie d'accéder à un service Feature qui est hébergé sur arcgis.com. Le service d'entités est partagé uniquement avec un groupe ou une organisation et n'est PAS public. Comment puis-je accéder à ce service dans mon code client. Voici mon code client qui génère une exception indiquant le jeton d'authentification requis. J'ai le jeton mais je ne sais pas comment utiliser ce jeton pour être authentifié pour utiliser le service. Ce même code fonctionne correctement pour les services partagés en tant que PUBLIC.

   IPropertySet sipPS = new PropertySet();
    sipPS.SetProperty("DATABASE", layerUrl);
    IWorkspaceFactory sipWSF = (IWorkspaceFactory)new ESRI.ArcGIS.Carto.FeatureServiceWorkspaceFactory();
    IWorkspace sipWS = sipWSF.Open(sipPS, 0);
    IFeatureWorkspace sipFWS = (IFeatureWorkspace)sipWS;
    IGroupLayer grpLayer = new GroupLayerClass();
    grpLayer.Name = Constants.ArcGISOnlineGroupLayerName;
    IFeatureClass sipFC = sipFWS.OpenFeatureClass("0");
    IFeatureLayer fl = new FeatureLayerClass();
    fl.Name = featureLayerName;
    fl.FeatureClass = sipFC;
    grpLayer.Add(fl as ILayer);
WAQ
la source
Souhaitez-vous configurer des connexions utilisateur ou des connexions d'application pour votre application? De plus, votre application utilise-t-elle des API basées sur OAuth 2? Lien de discussion: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Baltok
Je n'utilise pas d'API basée sur OAuth 2 pour l'authentification. Je génère simplement un jeton à l'aide de la requête GenerateToken en transmettant les informations de connexion de l'utilisateur. Après m'être connecté, j'ai publié un service sur Arcgis.com et l'ai partagé avec un groupe. Étant donné que le service n'est pas partagé en tant que public, lorsque moi-même ou le groupe auquel le service est partagé essaie de consommer ce service, l'erreur "Jeton d'authentification requis" s'affiche. J'ai le jeton mais je ne sais pas comment utiliser ce jeton pour consommer avec succès le service sécurisé.
WAQ
Ceci a été posté en tant que copie directe de stackoverflow.com/questions/26429713/… mais une prime a été ajoutée sur les deux sites
PolyGeo
@PolyGeo J'ai publié une copie de la même question à deux endroits car j'ai besoin d'une réponse urgente. Est-ce une violation d'une règle ou quoi?
WAQ
La politique de publication croisée sur plusieurs sites SO / SE a été discutée sur meta.stackexchange.com/questions/64068/… Cependant, en plaçant une prime sur la même question sur les deux sites, je crois comprendre qu'ils ne peuvent pas être fermés sur l'un ou l'autre site ( meta.stackexchange.com/questions/14591/… ). Néanmoins, en sensibilisant les répondeurs potentiels des deux sites aux questions-réponses de l'autre, cela peut conduire à des synergies et à une solution plus rapide.
PolyGeo

Réponses:

3

Votre layerUrl est similaire à: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer

Il suffit d' ajouter le jeton à l' URL: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer?token=gGIYjUwXvaO75l1X7LHsgOo2Yueoh1jTGRvrKm7K9ZBE-0TY-EA_Ml7vJtllQK9P2nngX5ciedKgHkjLOEgRSKYR8QhDJMDpWQ09PhTWubNACuFsNIQ3fdlbS6tsPO0h

lele3p
la source
J'ai essayé d'ajouter le jeton à la coucheUrl, mais je n'ai pas eu de chance. J'ai utilisé l'application Fiddler pour voir quelles URL sont générées par l'API ou le réseau, mais je ne vois pas http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServerêtre envoyé uniquement sur le réseau même après avoir ajouté le jeton avec la coucheUrl.
WAQ
Sur AGOL, sous mon contenu, cliquez sur "Ouvrir dans ArcGIS for Desktop" et lancez le téléchargement du fichier item.pitem. Dans ce fichier, vous pouvez trouver l'url de la couche d'entités. Ajoutez "? Token = <yourtoken> & f = json" à l'URL et ouvrez-le dans un navigateur. Dites-moi ce qui se passe.
lele3p
J'ai l'URL de la couche qui est "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServeret j'ai également généré le jeton. supposons que le jeton est abc112asdfkljznxc123123lkjkj23kljsi complet que l'url est comme "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"Et j'ai aussi essayé avec des sous-couches individuelles comme url:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj"mais pas de chance
WAQ
Je peux voir la couche dans le navigateur en utilisant l'URL et le jeton ci-dessus. C'est juste que je reçois une Token Authentication requiredexception lorsque je l'utilise dans du code publié dans la question d'origine :)
WAQ
coup total dans l'obscurité - le PropertySet pourrait-il avoir une propriété TOKEN non documentée?
MC5
1

Veuillez vous référer au lien ci-dessous, il semble que vous ayez un problème de proxy. Pour accéder à des services sécurisés, vous devez avoir un nom d'utilisateur et un mot de passe et simplement écrire un code où le jeton est généré au moment de l'exécution et il vous suffit de l'ajouter correctement

http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#//0048000000sv000000

Ajay Giri
la source
J'ai le nom d'utilisateur, le mot de passe et j'ai généré le jeton à l'aide d'une generateTokenrequête. Tout simplement pas en mesure de récupérer les services sécurisés que j'ai publiés.
WAQ
1

Cet exemple de message du forum GeoNet est basé sur javascript, mais il accomplit essentiellement ce que vous voulez.

Cependant, pour le cas de l'API 'ArcObjects for .Net' d'ESRI (que nous pouvons vous dire que vous utilisez en fonction des espaces de noms), vous devez implémenter la méthode IArcGISSingleSignon.GetToken. La méthode de cet objet connecte un utilisateur à ArcGIS Online (AGOL) et renvoie un jeton. La fabrique d'espace de travail et les définitions d'objet featureclass ne nécessitent pas le jeton, mais la connexion doit se produire avant d'accéder aux services de fonctionnalités AGOL sécurisés.

Enfin, tout comme un point API, IWorkspaceFactory est obsolète et IWorkspaceFactory2 est maintenant l'objet d'interface préféré - les signatures n'ont pas changé mais les implémentations backend l'ont fait.

Veuillez poster pour confirmer que votre complément C # se connecte correctement à AGOL une fois que vous implémentez des jetons de connexion unique à l'aide de la méthode GetToken.

JasonInVegas
la source
J'ai essayé `IArcGISSingleSignOn.GetToken 'et j'ai généré le jeton après avoir entré mes informations d'identification dans la boîte de dialogue de connexion qui apparaît. Ensuite exécuté le même code que dans la question, mais obtenant toujours la même exception "Jeton d'authentification requis".
WAQ