Jak uzyskać dostęp do usługi Feature Hosted na arcgis.com, która jest udostępniana tylko określonym grupom lub organizacjom

9

W mojej aplikacji C # próbuję uzyskać dostęp do usługi Feature, która jest hostowana na arcgis.com. Usługa funkcji jest udostępniana tylko grupie lub organizacji i NIE jest publiczna. Jak mogę uzyskać dostęp do tej usługi w kodzie mojego klienta? Oto mój kod klienta, który zgłasza wyjątek informujący, że wymagany jest token uwierzytelnienia. Mam token, ale nie wiem, jak użyć tego tokena do uwierzytelnienia w celu korzystania z usługi. Ten sam kod działa poprawnie w przypadku usług udostępnianych jako 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
źródło
Czy chcesz skonfigurować dane logowania użytkownika lub logowania aplikacji? Ponadto, czy Twoja aplikacja korzysta z interfejsów API opartych na OAuth 2? Link do dyskusji: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Baltok
Nie używam interfejsu API opartego na OAuth 2 do uwierzytelniania. Po prostu generuję token za pomocą zapytania GenerateToken, przekazując dane logowania użytkownika. Po zalogowaniu opublikowałem serwis na Arcgis.com i udostępniłem go grupie. Ponieważ usługa nie jest udostępniana jako publiczna, kiedy ja lub grupa, której usługa jest udostępniana, próbuję skorzystać z tej usługi, pojawia się błąd „Wymagany token uwierzytelnienia”. Mam token, ale nie wiem, jak mogę go użyć, aby pomyślnie korzystać z bezpiecznej usługi.
WAQ
Zostało to opublikowane jako bezpośredni egzemplarz ze stackoverflow.com/questions/26429713/…, ale dodano nagrodę w obu witrynach
PolyGeo
@PolyGeo Wysłałem kopię tego samego pytania w dwóch miejscach, ponieważ potrzebuję pilnej odpowiedzi. Czy to naruszenie jakiejś reguły czy co?
WAQ
Zasady dotyczące wysyłania postów do wielu witryn SO / SE zostały omówione na stronie meta.stackexchange.com/questions/64068/... Jednakże, przyznając nagrodę za to samo pytanie w obu witrynach, rozumiem, że nie można ich zamknąć obie strony ( meta.stackexchange.com/questions/14591/… ). Niemniej jednak poinformowanie potencjalnych respondentów z obu stron o pytaniach i odpowiedziach z drugiej może doprowadzić do synergii i szybszego rozwiązania.
PolyGeo

Odpowiedzi:

3

Twój layerUrl jest podobny pod adresem : http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer

Wystarczy dodać token do URL: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer?token=gGIYjUwXvaO75l1X7LHsgOo2Yueoh1jTGRvrKm7K9ZBE-0TY-EA_Ml7vJtllQK9P2nngX5ciedKgHkjLOEgRSKYR8QhDJMDpWQ09PhTWubNACuFsNIQ3fdlbS6tsPO0h

lele3p
źródło
Próbowałem dołączyć token do warstwyUrl, ale nie miałem szczęścia. Użyłem aplikacji Fiddler, aby zobaczyć, jakie adresy URL są generowane przez interfejs API lub sieć, ale nie widzę, że http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServersą wysyłane tylko przez sieć, nawet po dodaniu tokena za pomocą warstwyUrl.
WAQ
W AGOL, pod moją zawartością kliknij „Otwórz w ArcGIS na pulpicie” i rozpocznij pobieranie pliku item.pitem. W tym pliku można znaleźć adres URL warstwy obiektów. Dodaj „? Token = <yourtoken> & f = json” do adresu URL i otwórz go w przeglądarce. Powiedz mi co się dzieje.
lele3p
Mam adres URL warstwy, który jest "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServeri mam również wygenerowany token. załóżmy, że token jest abc112asdfkljznxc123123lkjkj23kljtak kompletny, że adres URL jest podobny. "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"Próbowałem też z pojedynczymi podwarstwami, url:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj"ale bez powodzenia
WAQ
Jestem w stanie wyświetlić warstwę w przeglądarce za pomocą powyższego adresu URL i tokena. Po prostu dostaję Token Authentication requiredwyjątek, gdy używam go w kodzie opublikowanym w pierwotnym pytaniu :)
WAQ
całkowite dźgnięcie w ciemności - czy PropertySet może mieć nieudokumentowaną właściwość TOKEN?
MC5
1

Zapoznaj się z poniższym linkiem, wygląda na to, że masz problem z serwerem proxy. Aby uzyskać dostęp do zabezpieczonych usług, musisz mieć nazwę użytkownika i hasło, po prostu napisz kod, w którym token jest generowany w czasie wykonywania, i po prostu musisz go poprawnie dołączyć

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

Ajay Giri
źródło
Mam nazwę użytkownika, hasło i wygenerowałem token za pomocą generateTokenzapytania. Po prostu nie mogę odzyskać bezpiecznych usług, które opublikowałem.
WAQ
1

Ten przykładowy post z forum GeoNet jest oparty na javascript, ale zasadniczo realizuje to, co chcesz zrobić.

Jednak w przypadku API ESRI „ArcObjects for .Net” (które możemy powiedzieć, że używasz na podstawie przestrzeni nazw) powinieneś zaimplementować metodę IArcGISSingleSignon.GetToken. Metoda tego obiektu zaloguje użytkownika do ArcGIS Online (AGOL) i zwróci token. Fabryka obszaru roboczego i definicje obiektów klasy obiektów nie wymagają tokena, ale logowanie musi nastąpić przed uzyskaniem dostępu do zabezpieczonych usług funkcji AGOL.

Wreszcie, podobnie jak punkt API, IWorkspaceFactory jest przestarzały, a IWorkspaceFactory2 jest teraz preferowanym obiektem interfejsu. - sygnatury nie uległy zmianie, ale implementacje backendu uległy zmianie.

Opublikuj, aby potwierdzić, że Twój dodatek C # poprawnie łączy się z AGOL po wdrożeniu tokenów jednokrotnego logowania przy użyciu metody GetToken.

JasonInVegas
źródło
Próbowałem „IArcGISSingleSignOn.GetToken” i otrzymałem token wygenerowany po wprowadzeniu moich danych uwierzytelniających w wyświetlonym oknie dialogowym logowania. Następnie wykonał ten sam kod, co w pytaniu, ale wciąż otrzymywał ten sam wyjątek „Wymagany token uwierzytelnienia”.
WAQ