Como acessar um serviço de recursos hospedado no arcgis.com, que é compartilhado apenas com grupos ou organizações específicos

9

No meu aplicativo C #, estou tentando acessar um serviço de recursos que está hospedado no arcgis.com. O serviço do recurso é compartilhado apenas com um grupo ou organização e NÃO é público. Como posso acessar este serviço no meu código de cliente. Aqui está o código do meu cliente que lança uma exceção dizendo que o Token de autenticação é necessário. Eu tenho o token, mas não sei como usá-lo para ser autenticado para usar o serviço. Esse mesmo código funciona bem para serviços compartilhados 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
fonte
Deseja configurar logins de usuário ou logins de aplicativos para seu aplicativo? Além disso, seu aplicativo usa APIs baseadas em OAuth 2? Link para discussão: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Baltok
Não estou usando a API baseada em OAuth 2 para autenticação. Estou simplesmente gerando um token usando a consulta GenerateToken, passando as credenciais de logon do usuário. Após o login, publiquei um serviço no Arcgis.com e o compartilhei com um grupo. Como o serviço não é compartilhado como público, quando eu próprio ou o grupo com o qual o serviço é compartilhado tenta consumi-lo, o erro "Token de autenticação necessário" é exibido. Eu tenho o token, mas não sei como posso usá-lo para consumir com êxito o serviço seguro.
WAQ
Este tem sido cross-postou como uma cópia direta de stackoverflow.com/questions/26429713/... mas teve uma recompensa adicionado em ambos os sites
PolyGeo
@PolyGeo Publiquei cópia da mesma pergunta em dois lugares porque preciso de resposta urgente. Isso é violação de alguma regra ou o quê?
WAQ
A política de postagem cruzada em vários sites SO / SE foi discutida em meta.stackexchange.com/questions/64068/… No entanto, ao colocar uma recompensa na mesma pergunta nos dois sites, entendo que eles não podem ser fechados em qualquer site ( meta.stackexchange.com/questions/14591/… ). No entanto, ao conscientizar os respondentes em potencial dos dois sites sobre as perguntas e respostas, por outro, isso pode levar a sinergias e a uma solução mais rápida.
PolyGeo

Respostas:

3

Seu layerUrl é semelhante em: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer

Basta adicionar o token para Url: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer?token=gGIYjUwXvaO75l1X7LHsgOo2Yueoh1jTGRvrKm7K9ZBE-0TY-EA_Ml7vJtllQK9P2nngX5ciedKgHkjLOEgRSKYR8QhDJMDpWQ09PhTWubNACuFsNIQ3fdlbS6tsPO0h

lele3p
fonte
Tentei acrescentar o token ao layerUrl, mas não tive sorte. Usei o aplicativo Fiddler para ver quais URLs estão sendo gerados pela API ou pela rede, mas não vejo apenas http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServersendo enviados pela rede, mesmo depois de anexar o token ao layerUrl.
WAQ
No AGOL, no meu conteúdo, clique em "Abrir no ArcGIS for Desktop" e inicie o download do arquivo item.pitem. Neste arquivo, você pode encontrar o URL da camada de recurso. Adicione "? Token = <yourtoken> & f = json" ao URL e abra-o em um navegador. Diga-me o que está acontecendo.
Lele3p # 23/14
Eu tenho o URL da camada que é "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServere também tenho o token gerado. vamos supor token é abc112asdfkljznxc123123lkjkj23kljtão url completa é como "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"E eu também tentei com sublayers individuais como url:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj", mas sem sorte
WAQ
Eu consigo visualizar a camada no navegador usando o URL e o token acima. Seu justo que eu estou ficando Token Authentication requiredexceção quando eu usá-lo no código que é publicado na pergunta original :)
WAQ
facada total no escuro - o PropertySet pode ter uma propriedade TOKEN não documentada?
MC5 23/10
1

Consulte o link abaixo, parece que você tem algum problema de proxy. Para acessar serviços protegidos, você precisa ter nome de usuário e senha e apenas escrever um código no qual o token é gerado no tempo de execução e anexá-lo adequadamente

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

Ajay Giri
fonte
Eu tenho o nome de usuário, senha e gerei o token usando a generateTokenconsulta. Só não consigo recuperar os serviços seguros que publiquei.
WAQ
1

Esta postagem de exemplo do fórum da GeoNet é baseada em javascript, mas basicamente realiza o que você deseja que aconteça.

No entanto, no caso da API 'ArcObjects for .Net' da ESRI (que podemos dizer que você está usando com base nos namespaces), você deve implementar o método IArcGISSingleSignon.GetToken. O método desse objeto conectará um usuário ao ArcGIS Online (AGOL) e retornará um token. A fábrica da área de trabalho e as definições de objeto da classe de recurso não requerem o token, mas a conexão deve ocorrer antes de acessar os serviços de recurso AGOL seguros.

Por fim, apenas como um ponto de API, o IWorkspaceFactory é obsoleto e o IWorkspaceFactory2 agora é o objeto de interface preferido - as assinaturas não foram alteradas, mas as implementações de back-end.

Poste para confirmar que o suplemento C # se conecta corretamente ao AGOL depois de implementar os tokens de conexão única usando o método GetToken.

JasonInVegas
fonte
Tentei `IArcGISSingleSignOn.GetToken 'e obtive o token gerado depois de inserir minhas credenciais na caixa de diálogo de logon que aparece. Posteriormente, executou o mesmo código da pergunta, mas ainda obtendo a mesma exceção "Token de autenticação necessário".
WAQ