Cómo acceder a un servicio Feature alojado en arcgis.com que se comparte solo con grupos u organizaciones particulares

9

En mi aplicación C #, estoy tratando de acceder a un servicio Feature que está alojado en arcgis.com. El servicio de funciones se comparte solo con un grupo u organización y NO es público. ¿Cómo puedo acceder a este servicio en mi código de cliente? Aquí está mi código de cliente que arroja una excepción que dice que se requiere el token de autenticación. Tengo el token pero no sé cómo usar ese token para autenticarme para usar el servicio. Este mismo código funciona bien para servicios que se comparten como 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
fuente
¿Desea configurar inicios de sesión de usuario o inicios de sesión de aplicación para su aplicación? Además, ¿su aplicación utiliza API basadas en OAuth 2? Enlace de discusión: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Baltok
No estoy usando la API basada en OAuth 2 para la autenticación. Simplemente estoy generando un token utilizando la consulta GenerateToken al pasar las credenciales de inicio de sesión del usuario. Después de iniciar sesión, publiqué un servicio en Arcgis.com y lo compartí con un grupo. Dado que el servicio no se comparte como Público, cuando yo mismo, o el grupo al que se comparte el servicio, intenta consumir este servicio, aparece el error "Se requiere token de autenticación". Tengo el token pero no sé cómo puedo usar ese token para consumir con éxito el servicio seguro.
WAQ
Esto se ha publicado como una copia directa de stackoverflow.com/questions/26429713/… pero se ha agregado una recompensa en ambos sitios
PolyGeo
@PolyGeo Publiqué una copia de la misma pregunta en dos lugares porque necesito una respuesta urgente. ¿Es esa violación de alguna regla o qué?
WAQ
La política de publicación cruzada en múltiples sitios SO / SE se ha discutido en meta.stackexchange.com/questions/64068/… Sin embargo, al colocar una recompensa por la misma pregunta en ambos sitios, entiendo que no se pueden cerrar en cualquier sitio ( meta.stackexchange.com/questions/14591/… ). Sin embargo, al hacer que los posibles respondedores de ambos sitios conozcan las preguntas y respuestas del otro, puede generar sinergias y una solución más rápida.
PolyGeo

Respuestas:

3

Su layerUrl es similar en: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer

Sólo tiene que añadir el token a Url: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer?token=gGIYjUwXvaO75l1X7LHsgOo2Yueoh1jTGRvrKm7K9ZBE-0TY-EA_Ml7vJtllQK9P2nngX5ciedKgHkjLOEgRSKYR8QhDJMDpWQ09PhTWubNACuFsNIQ3fdlbS6tsPO0h

lele3p
fuente
Intenté agregar el token con el layerUrl, pero no tuve suerte. Utilicé la aplicación Fiddler para ver qué URL están generando la API o la red, pero no veo que solo http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServerse envíen a través de la red incluso después de agregar el token con layerUrl.
WAQ
En AGOL, bajo mi contenido, haga clic en "Abrir en ArcGIS for Desktop" e inicie la descarga del archivo item.pitem. En este archivo puede encontrar la url de la capa de entidades. Agregue "? Token = <yourtoken> & f = json" a la url y ábralo en un navegador. Dime que esta pasando.
lele3p
Tengo la URL de la capa que es "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServery también tengo el token generado. Asumamos token es abc112asdfkljznxc123123lkjkj23kljtan url completa es como "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"Y también he tratado con subcapas individuales como url:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj", pero sin suerte
WAQ
Puedo ver la capa en el navegador usando la URL y el token anteriores. Es solo que obtengo una Token Authentication requiredexcepción cuando lo uso en el código publicado en la Pregunta original :)
WAQ
puñalada total en la oscuridad: ¿podría el PropertySet tener una propiedad TOKEN indocumentada?
MC5
1

Consulte el siguiente enlace, parece ser que tiene algún problema de proxy. Para acceder a un servicio seguro, debe tener un nombre de usuario y una contraseña, y simplemente escribir un código donde se genera el token en tiempo de ejecución y solo debe agregarlo correctamente

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

Ajay Giri
fuente
Tengo el nombre de usuario, la contraseña y he generado el token mediante la generateTokenconsulta. Simplemente no puedo recuperar los servicios seguros que he publicado.
WAQ
1

Esta publicación de ejemplo del foro GeoNet está basada en javascript, pero esencialmente logra lo que quieres que suceda.

Sin embargo, para el caso de la API 'ArcObjects for .Net' de ESRI (que podemos decir que está utilizando en función de los espacios de nombres), debe implementar el método IArcGISSingleSignon.GetToken. El método de este objeto iniciará sesión en un usuario en ArcGIS Online (AGOL) y devolverá un token. La fábrica del espacio de trabajo y las definiciones de objetos de la clase de características no requieren el token, pero el inicio de sesión debe ocurrir antes de acceder a los servicios de características seguros de AGOL.

Por último, al igual que un punto API, IWorkspaceFactory es obsoleto e IWorkspaceFactory2 ahora es el objeto de interfaz preferido: las firmas no cambiaron, pero las implementaciones de backend sí.

Publique para confirmar que su complemento C # se conecta correctamente a AGOL una vez que implemente tokens de inicio de sesión único utilizando el método GetToken.

JasonInVegas
fuente
Intenté 'IArcGISSingleSignOn.GetToken' y obtuve el token generado después de ingresar mis credenciales en el cuadro de diálogo de inicio de sesión que aparece. Posteriormente ejecutó el mismo código que en la pregunta, pero aún obteniendo la misma excepción "Se requiere token de autenticación".
WAQ