RESTful API ile ArcGIS Server güvenli katmanlarına programlı kimlik doğrulama


16

Internet'te güvenli harita hizmetlerini gösteren bir ArcGIS 10.1 Server örneğim var. Benim ihtiyacım (şu anda ArcGIS Javascript API 3.3 sürümünü kullanarak inşa ediyorum) bir istemci uygulaması kodlamak için kullanıcının bu güvenli web hizmetlerini görüntülemek için izin:

Bu çevrimiçi ESRI örneğinin iyi bir başlangıç olduğunu düşünüyorum .

Benim isteğim, kullanıcının HER servis hizmetleri kimlik doğrulaması istemesini istemiyorum çünkü zaten tüm harita hizmetlerinin kendisine ait olduğunu ve bu nedenle aynı kullanıcı adı ve şifre altında erişilebilir olduğunu biliyorum. Benim düşünceme göre, kimlik bilgileri istemi sadece ONCE görünmelidir ve bu nedenle JS kodu bir tür RESTful giriş çağrısı yoluyla her bir eşleme servisine kimlik bilgilerini beslemelidir. Bana göre ArcGIS Server REST API böyle bir çağrı sağlıyor gibi görünmüyor ... belki yanılıyorum.

Bu nedenle ArcGIS Server ile güvenli harita servislerine giriş yapmanın bu "RESTful" yolu mümkün mü (güvenli servislere programlı olarak erişilmesini mümkün kılıyor)? Öyleyse, herhangi biriniz bunu açıklayan web kaynaklarına örnekler veya bağlantılar sağlayabilir misiniz?


Lütfen bize ArcGIS GIS Server sürümünü (10.0 VEYA 10.1) bildirin ??
Sunil

Sunil, yazmayı unuttum, 10.1!
13

1
windows auth değil arcgis güvenlik deposu mu kullanıyorsunuz?
Brad Nesom

@Brad Nesom, ArcGIS Server örneğim yerleşik bir güvenlik deposu kullanıyor (kullanıcılar ve rollerle), ancak kimlik doğrulama amacıyla örneği harici bir LDAP sunucusuna
bağlamayı planlıyorum

Yanıtlar:


11

Sonunda aradığım şeyi buldum: jeton oluşturmak için kullanabileceğim uygun bir ArcGIS Server web uç noktası!

Çağrı şudur:

GET http://<arcgisserver_host:port>/arcgis/tokens?request=getToken&username=<usr>&password=<usr>&expiration=<token_lifespan>

Bu, jetonu HTTP yanıt gövdesine geri verir ve kimlik bilgileri istenmeden başka bir güvenli kaynak isteğine gönderebilir. Belirteç, Cookieistek tarafında, şu anda istemci tarafında bir çerezde saklandığı için değer olmalıdır .

Ama ... kahretsin ! Bu belirteç oluşturucu ArcGIS Server REST API'sinin bir parçası DEĞİLDİR !!! Çevrimiçi API belgelerinde bulamadım ! Dünyanın neresinde bulabilirdim ???

Bu, ArcGIS Server'ın RESTful kimlik doğrulama çerçevesine sahip olmadığı anlamına gelir.

Örneğin, bu harita hizmetini ArcGIS REST API'sı altında açığa çıkarırsak /arcgis/rest/services/myDir/myMapService/MapServer/layersve bu kaynağı elde etmeye çalışırsak, ArcGIS Server'dan aldığımız şey, bir 200: OKdurum kodu ve gövdede bir HTML belgesine sahip bir yanıttır (HTML bir giriş formudur) ). RESTful bir girişten, isteğin bana 401: Authentication Requiredbir WWW-Authenticatebaşlık ile birlikte bir durum kodu vermesini beklerdim ... Ben her şeyi bir REST istemci programı kullanarak kendim test ettim.


3
Ne yazık ki çoğu "RESTful" uygulamaları RESTful değil :) Birkaç yıl önce bu konuda çok katı olmaktan vazgeçtim çünkü gerçek şu ki çoğu uygulama "REST benzeri". Özel kullanım durumunuz için genellikle farklı bir yaklaşım benimserim. Yerleşik seçim kimlik doğrulama sistemini ve proxy açık ArcGIS isteklerini kullanıyorum. Django yetkilendirme veya yakut veya .net veya herhangi bir şeyle kimlik doğrulaması yapıyorsam bu sistemi kullanıyorum. Daha sonra, bu sistem uygun olduğunu söylediğinde, istekleri dış dünyaya kilitlenmiş bir dahili ArcGIS sunucusuna / bağlantı noktasına proxy yapabilirsiniz.
Ragi Yaser Burhum

2
Merhaba @Ragi Yaser Burhum, haklısın: Asla tamamen RESTful bir dünyada yaşamayacağız ;-) Senin gibi bir yaklaşımı da düşündüm: Bir proxy (Fikir ArcGIS Sunucusu dışındaki web servislerine yönelik istekleri de ele alabilir) fikrini seviyorum ancak tüm mimarinin karmaşıklığını olabildiğince düşük tutmaya ihtiyacım var. Bu nedenle, kullanıcıların harita hizmetlerine programlı olarak kimlik doğrulaması yapmanın düz bir yolu olduğunu keşfettikten sonra, yürüyeceğim! Yine de teşekkürler!
csparpa

Belki bu çok eski bir soru, ama umarım Esri REST API'nin artık GenerateToken yöntemine sahip olduğunu görebilirsiniz: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Nathan Wu

7

Lütfen ArcGIS Server Security'nin nasıl çalıştığına bir göz atın .

Temel olarak, kullanıcılar ve gruplar oluşturmanız ve belirli hizmetler üzerinde belirli bir Kullanıcı hakları vermeniz gerekir.

Bunu yaptıktan sonra, JavaScript Uygulamanızda Token tabanlı güvenlik kullanmanız gerekir. Bunun anlamı, Kullanıcıdan Kullanıcı Adını ve şifresini sormanızdır. Bu, Kimlik Bilgilerini doğrulayan ve bir jeton geri gönderen ArcGIS Sunucusuna gönderilir. Bu simge, bir kaynak istendiğinde kullanıcıyı doğrulamak için kullanılır.

Bir programcı olarak bu belirteci her harita hizmetine, sorgu hizmetine vb. Göndereceksiniz.

Bu sayfa Token Tabanlı Hizmetlerin nasıl kullanılacağını açıklar .

ArcGIS Javascript API zaten bunu yapmak için bir Class, IdentityManager ile birlikte gelir .

İşte olan numunelerin çift Kimlik Yöneticisi nasıl kullanılacağı hakkında.


3

JavaScript için ArcGIS API'sında, Kimlik Yöneticisi adlı tam olarak ne yapmak istediğinizi ele alan bir widget bulunur . Nasıl çalıştığını görmek için kimlik yöneticisini kullanan örneklere göz atın .

Devdatta tarafından bağlanan örnek, geçerli olmakla birlikte, Kimlik Öncesi Yöneticisi'nin bunu yapmasının bir yoludur ve artık güvenli hizmetler için kimlik doğrulamasının API'ye dönüştürülmesi için gereken çok daha fazla kod içerir.


1
ESRI belgeleri için örnek bağlantıyı yeni almıştım. Belgeler yeni örnekleri gösterecek şekilde güncellenebilir mi?
Devdatta Tengshe

2
Millet, ipuçlarýn için teţekkürler ama sanýrým anlamýna gelmedin. Senaryo: Kullanıcım N güvenli harita hizmetlerine erişecek, bu da bir oturum açma istemiyle N kez rahatsız edileceği anlamına geliyor. TÜM kullanıcının harita hizmetlerine aynı kimlik bilgileri kullanılarak erişilebildiğinden, uygulamamın kendileri için SADECE BİR KEZ istemesini ve her harita hizmetini otomatik olarak doğrulamak için kullanmasını istiyorum. Bu aşamada, sanırım ArcGIS Sunucusu ile birden çok eşleme yetkisini işlemek için bir proxy sayfası kullanmalıyım . Kulağa iyi geliyor? Daha basit bir alternatif var mı? Şimdiden teşekkürler, umarım ihtiyaçlarımı netleştirdim ..
csparpa

2

Proxy'yi de kullanabilirsiniz, böylece uygulamanız hiçbir zaman KullanıcıAdı ve Parola istemez. Ayrıca Token'i güvenli servislere eriştiğiniz her zaman erişecek şekilde ayarlamanıza gerek yoktur. Yapmanız gereken tek şey JS dosyanızda aşağıdakileri ayarlamaktır: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (örneğin. http: //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = true; Ve proxy.config dosyasında, uygulamanızda tüketen tüm hizmetleri sağlamaktadır.
bakınız https: //github.com/Esri/resource-proxy/ proxy hakkında daha fazla bilgi için. jeton tabanlı kimlik doğrulaması yapmak istediğinizde, proxy.config dosyanıza yalnızca url, kullanıcı adı, şifre ve matchAll içerik eklemeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.