Otentikasi terprogram untuk ArcGIS Server mengamankan lapisan melalui RESTful API

16

Saya memiliki instance ArcGIS 10.1 Server yang mengekspos layanan peta aman di Internet. Kebutuhan saya adalah untuk membuat kode aplikasi klien (yang saat ini saya bangun menggunakan versi 3.3 dari ArcGIS Javascript API) memungkinkan pengguna untuk melihat layanan web yang diamankan tersebut:

Saya pikir contoh ESRI online ini adalah awal yang baik.

Keinginan saya adalah agar pengguna tidak diminta untuk SETIAP otentikasi layanan peta karena saya sudah tahu bahwa SEMUA layanan peta miliknya dan karenanya dapat diakses olehnya di bawah nama pengguna & kata sandi yang sama. Dalam ide saya, permintaan kredensial akan muncul SEKALI saja dan oleh karena itu kode JS harus memberi makan kredensial ke setiap layanan peta melalui semacam panggilan masuk yang TENANG. Bagi saya sepertinya ArcGIS Server REST API tidak menyediakan panggilan seperti itu ... mungkin saya salah.

Oleh karena itu, apakah ini cara "RESTful" untuk masuk ke layanan peta aman yang layak dengan ArcGIS Server (memungkinkan untuk mengakses layanan aman secara terprogram)? Jika demikian, dapatkah Anda memberikan contoh atau tautan ke sumber daya web yang menjelaskan hal ini?

csparpa
sumber
Silakan beri tahu kami versi ArcGIS GIS Server (10.0 ATAU 10.1) ??
Sunil
Sunil, saya lupa menulisnya, ini 10.1!
csparpa
1
apakah Anda menggunakan arcgis security store dan bukan windows auth?
Brad Nesom
@Brad Nesom untuk saat ini contoh ArcGIS Server saya menggunakan toko keamanan bawaan (dengan pengguna dan peran), tapi saya berencana untuk menghubungkan instance ke server LDAP eksternal untuk tujuan otentikasi
csparpa

Jawaban:

11

Saya akhirnya menemukan apa yang saya cari: titik akhir web Server ArcGIS yang tepat yang dapat saya gunakan untuk menghasilkan token!

Panggilannya adalah ini:

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

yang mengembalikan token ke badan respons HTTP, dan orang dapat mengirimkannya ke setiap permintaan lebih lanjut ke sumber daya aman tanpa diminta kredensial lagi. Token harus menjadi nilai untuk Cookieheader permintaan, karena saat ini disimpan ke dalam cookie di sisi klien.

Tapi ... sial ! Generator token ini BUKAN bagian dari ArcGIS Server REST API !!! Saya tidak dapat menemukannya di dokumentasi API online ! Di mana di dunia aku bisa menemukannya ???

Ini berarti bahwa ArcGIS Server tidak memiliki kerangka kerja otentikasi yang tenang.

Sebagai contoh, jika kita memiliki layanan peta ini terkena di bawah ArcGIS REST API: /arcgis/rest/services/myDir/myMapService/MapServer/layersdan kami mencoba untuk MENDAPATKAN sumber daya ini, apa yang kita dapatkan dari ArcGIS Server adalah respons yang memiliki 200: OKkode status dan dokumen HTML di dalam tubuh (HTML adalah formulir login ). Dari calon yang masuk RESTful, saya akan berharap bahwa permintaan memberi saya kembali 401: Authentication Requiredkode status bersama dengan WWW-Authenticateheader ... Saya menguji semua ini sendiri menggunakan program klien REST.

csparpa
sumber
3
Sayangnya sebagian besar implementasi "RESTful" tidak RESTful :) Beberapa tahun yang lalu saya menyerah untuk menjadi super ketat tentang ini karena kebenarannya adalah bahwa sebagian besar implementasi adalah "REST-like". Untuk kasus penggunaan khusus Anda, saya biasanya mengambil pendekatan yang berbeda. Saya menggunakan sistem otentikasi bawaan pilihan dan proxy membuka permintaan ArcGIS. Jadi jika saya menangani otentikasi dengan autentikasi Django, atau ruby, atau .net atau apa pun, saya menggunakan sistem itu. Kemudian, ketika sistem mengatakan tidak apa-apa, Anda dapat mem-proxy permintaan ke server / porta ArcGIS internal yang dikunci dari dunia luar.
Ragi Yaser Burhum
2
Hai @Ragi Yaser Burhum, Anda benar: kami tidak akan pernah hidup di dunia yang sepenuhnya tenang ;-) Saya juga mempertimbangkan pendekatan seperti milik Anda: Saya suka gagasan memiliki proxy (yang juga bisa menangani permintaan ke layanan web selain ArcGIS Server , juga) tapi saya perlu menjaga kompleksitas seluruh arsitektur serendah mungkin. Jadi, setelah menemukan bahwa ada cara langsung untuk mengautentikasi pengguna ke layanan peta, saya akan berjalan itu! Bagaimanapun, terima kasih!
csparpa
Mungkin ini pertanyaan yang terlalu lama, tetapi semoga Anda dapat melihat Esri REST API sekarang memiliki metode GenerateToken: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Nathan Wu
7

Silakan lihat di Bagaimana ArcGIS Server Security bekerja.

Pada dasarnya, Anda perlu membuat pengguna dan grup, dan memberikan hak Pengguna tertentu atas layanan tertentu.

Setelah Anda selesai melakukannya, maka Anda perlu menggunakan keamanan berbasis Token di Aplikasi JavaScript Anda. Artinya, Anda meminta UserName & kata sandi mereka. Itu dikirim ke Server ArcGIS, yang memvalidasi Kredensial, dan mengirimkan kembali token. Token ini digunakan untuk memvalidasi pengguna setiap kali sumber daya diminta.

Anda sebagai programmer akan mengirimkan token ini ke setiap layanan peta, layanan permintaan, dll.

Halaman ini merinci cara menggunakan Layanan Berbasis Token .

ArcGIS Javascript API sudah dilengkapi dengan Class, IdentityManager untuk melakukan ini.

Berikut adalah beberapa contoh tentang cara menggunakan Identity Manager.

Devdatta Tengshe
sumber
3

Di ArcGIS API untuk JavaScript, ada widget bernama Identity Manager yang membahas apa yang ingin Anda lakukan. Lihat sampel yang menggunakan manajer identitas untuk melihat cara kerjanya.

Sampel yang ditautkan oleh Devdatta, meskipun valid, adalah cara pre-Identity Manager dalam melakukan ini dan melibatkan lebih banyak kode yang diperlukan sekarang karena otentikasi untuk layanan aman dimasukkan ke dalam API.

Derek Swingley
sumber
1
Saya baru saja mengambil tautan sampel untuk dokumentasi ESRI. Bisakah dokumentasi diperbarui untuk menunjuk ke sampel baru?
Devdatta Tengshe
2
Teman-teman, terima kasih atas petunjuk Anda, tetapi saya pikir Anda tidak mengerti maksud saya. Skenarionya adalah: pengguna saya akan mengakses layanan map aman N, yang berarti dia akan terganggu N kali dengan prompt login. Karena layanan peta SEMUA pengguna dapat diakses menggunakan kredensial yang sama, saya ingin aplikasi saya meminta JUST ONCE untuk mereka dan kemudian menggunakannya untuk secara otomatis mengotentikasi setiap layanan peta. Pada tahap ini, saya kira saya harus menggunakan halaman proxy untuk menangani beberapa layanan peta auth dengan ArcGIS Server. Kedengarannya bagus? Adakah alternatif yang lebih lurus? Terima kasih sebelumnya, harap saya menjelaskan kebutuhan saya ..
csparpa
2

Anda juga dapat menggunakan Proksi, sehingga aplikasi Anda tidak akan pernah meminta UserName dan Kata Sandi. Dan Anda tidak perlu mengatur Token untuk mengakses layanan aman setiap kali Anda mengaksesnya. Satu-satunya hal yang perlu Anda lakukan adalah di file JS Anda, atur yang berikut ini: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (misalnya., http: //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = true; Dan dalam file proxy.config Anda, berikan semua layanan yang Anda konsumsi dalam aplikasi Anda.
Rujuk https: //github.com/Esri/resource-proxy/ untuk detail lebih lanjut tentang proxy. Seperti yang Anda inginkan otentikasi berbasis token, dalam file proxy.config Anda, Anda perlu menambahkan url, nama pengguna, kata sandi, dan cocokkan semua konten saja.

Mayur Patel
sumber