Как получить доступ к сервису Feature, размещенному на arcgis.com, который доступен только определенным группам или организациям

9

В моем приложении на C # я пытаюсь получить доступ к сервису Feature, который размещен на arcgis.com. Сервис объектов доступен только группе или организации и НЕ является общедоступным. Как я могу получить доступ к этой услуге в моем коде клиента. Вот мой код клиента, который выдает исключение, сообщающее, что требуется токен аутентификации. У меня есть токен, но я не знаю, как использовать этот токен для аутентификации для использования сервиса. Этот же код прекрасно работает для служб, которые являются общими для общего доступа.

   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
источник
Вы хотите настроить логины пользователей или приложения для своего приложения? Кроме того, использует ли ваше приложение API на основе OAuth 2? Ссылка для обсуждения: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Балток
Я не использую api на основе OAuth 2 для аутентификации. Я просто генерирую токен, используя запрос GenerateToken, передавая учетные данные пользователя. После входа в систему я опубликовал сервис на Arcgis.com и поделился им с группой. Так как служба не является общедоступной, как Public, когда я сам или группа, которой принадлежит служба, пытается использовать эту службу, появляется ошибка «Требуется токен аутентификации». У меня действительно есть токен, но я не знаю, как я могу использовать этот токен, чтобы успешно использовать безопасный сервис.
WAQ
Это была перекрестная публикация в виде прямой копии с stackoverflow.com/questions/26429713/…, но на оба сайта была добавлена
награда
@PolyGeo Я разместил копию одного и того же вопроса в двух местах, потому что мне нужен срочный ответ. Это нарушение какого-то правила или как?
WAQ
Политика перекрестной публикации на нескольких сайтах SO / SE обсуждалась по адресу meta.stackexchange.com/questions/64068/… Однако, поскольку я предоставляю вознаграждение за один и тот же вопрос на обоих сайтах, я понимаю, что их нельзя закрыть любой сайт ( meta.stackexchange.com/questions/14591/… ). Тем не менее, информирование потенциальных респондентов с обоих сайтов о вопросах и ответах на другом может привести к синергии и более быстрому решению.
PolyGeo

Ответы:

3

Ваш layerUrl похож на: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer

Просто добавьте маркер URL: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer?token=gGIYjUwXvaO75l1X7LHsgOo2Yueoh1jTGRvrKm7K9ZBE-0TY-EA_Ml7vJtllQK9P2nngX5ciedKgHkjLOEgRSKYR8QhDJMDpWQ09PhTWubNACuFsNIQ3fdlbS6tsPO0h

lele3p
источник
Я попытался добавить токен с помощью layerUrl, но безуспешно. Я использовал приложение Fiddler, чтобы увидеть, какие URL-адреса генерируются API или сетью, но я не вижу http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServerотправки только по сети даже после добавления токена с layerUrl.
WAQ
На AGOL, под моим содержанием, нажмите «Открыть в ArcGIS for Desktop» и начните загрузку файла item.pitem. В этом файле вы можете найти URL слоя объектов. Добавьте «? Token = <yourtoken> & f = json» к URL-адресу и откройте его в браузере. Скажи мне, что происходит.
lele3p
У меня есть URL-адрес слоя, "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServerи у меня также есть сгенерированный токен. давайте предположим, что токен abc112asdfkljznxc123123lkjkj23kljнастолько полный, как URL, "http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"и я также пробовал с отдельными подслоями, как, url:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj"но не повезло
WAQ
Я могу просмотреть слой в браузере, используя выше URL и токен. Просто я получаю Token Authentication requiredисключение, когда использую его в коде, опубликованном в оригинальном Вопросе :)
WAQ
полный удар в темноте - может ли PropertySet иметь недокументированное свойство TOKEN?
MC5
1

Пожалуйста, обратитесь по ссылке ниже, похоже, что у вас есть проблема с прокси. Для доступа к защищенным сервисам вам нужно иметь имя пользователя и пароль и просто написать код, в котором токен генерируется во время выполнения, и вам просто нужно правильно добавить его

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

Аджай Гири
источник
У меня есть имя пользователя, пароль и я сгенерировал токен с помощью generateTokenзапроса. Просто не могу получить защищенные сервисы, которые я опубликовал.
WAQ
1

Этот пример поста с форума GeoNet основан на javascript, но, по сути, он выполняет то, что вы хотите.

Однако в случае API ESRI «ArcObjects for .Net» (который мы можем сказать, что вы используете на основе пространств имен) вы должны реализовать метод IArcGISSingleSignon.GetToken. Метод этого объекта зарегистрирует пользователя в ArcGIS Online (AGOL) и вернет токен. Фабрика рабочей области и определения объектов классов объектов не требуют токена, но вход в систему должен произойти до получения доступа к защищенным сервисам объектов AGOL.

Наконец, как точка API, IWorkspaceFactory устарел, и теперь IWorkspaceFactory2 является предпочтительным интерфейсным объектом. Сигнатуры не изменились, но реализации бэкэнда изменились.

Пожалуйста, оставьте сообщение, чтобы убедиться, что ваша надстройка C # правильно подключается к AGOL, как только вы внедрили токены единого входа с помощью метода GetToken.

JasonInVegas
источник
Я попробовал `IArcGISSingleSignOn.GetToken 'и получил токен, сгенерированный после ввода моих учетных данных в появившемся диалоговом окне входа. После этого выполнил тот же код, что и в вопросе, но все равно получил то же исключение «Требуется токен аутентификации».
WAQ