การพิสูจน์ตัวตนแบบเป็นโปรแกรมไปยัง ArcGIS Server รักษาความปลอดภัยเลเยอร์ผ่าน RESTful API


16

ฉันมีอินสแตนซ์ของเซิร์ฟเวอร์ ArcGIS 10.1 ที่เปิดเผยบริการแผนที่ที่ปลอดภัยบนอินเทอร์เน็ต ความต้องการของฉันคือการเขียนรหัสแอปพลิเคชันไคลเอนต์ (ซึ่งขณะนี้ฉันกำลังสร้างโดยใช้ ArcGIS Javascript API รุ่น 3.3) ทำให้ผู้ใช้สามารถดูเว็บเซอร์ที่ปลอดภัยเหล่านี้ได้:

ฉันคิดว่าตัวอย่าง ESRI ออนไลน์นี้เป็นการเริ่มต้นที่ดี

ความประสงค์ของฉันคือไม่ให้ผู้ใช้แจ้งขอการรับรองความถูกต้องของบริการแผนที่ EACH เพราะฉันรู้อยู่แล้วว่าการบริการแผนที่ทั้งหมดเป็นของเธอ / เธอ ในความคิดของฉันพรอมต์ของข้อมูลรับรองควรปรากฏเพียงครั้งเดียวและดังนั้นรหัส JS ควรป้อนข้อมูลประจำตัวให้กับแต่ละ mapservice ผ่านการเรียกเข้าสู่ระบบ RESTful สำหรับฉันดูเหมือนว่า ArcGIS Server REST API จะให้การโทรดังกล่าว ... บางทีฉันผิด

ดังนั้นวิธีนี้ "สงบ" ในการลงชื่อเข้าใช้บริการแผนที่ที่ปลอดภัยเป็นไปได้ด้วย ArcGIS Server (ทำให้สามารถเข้าถึงบริการที่ปลอดภัยโดยทางโปรแกรมหรือไม่) ถ้ามีคุณสามารถให้ตัวอย่างหรือลิงค์ไปยังแหล่งข้อมูลบนเว็บเพื่ออธิบายสิ่งนี้ได้หรือไม่?


โปรดแจ้งให้เราทราบรุ่นเซิร์ฟเวอร์ ArcGIS GIS (10.0 หรือ 10.1) ??
นิลม

นิลฉันลืมที่จะเขียนมันเป็น 10.1!
csparpa

1
คุณใช้ที่เก็บความปลอดภัย arcgis ไม่ใช่ windows auth หรือไม่?
แบรด Nesom

@Brad Nesom ในขณะที่อินสแตนซ์ ArcGIS Server ของฉันกำลังใช้ที่เก็บความปลอดภัยในตัว (กับผู้ใช้และบทบาท) แต่ฉันวางแผนที่จะเชื่อมโยงอินสแตนซ์กับเซิร์ฟเวอร์ LDAP ภายนอกเพื่อการตรวจสอบสิทธิ์
csparpa

คำตอบ:


11

ในที่สุดฉันก็พบสิ่งที่ฉันกำลังมองหา: จุดสิ้นสุดของเว็บ ArcGIS Server ที่เหมาะสมที่ฉันสามารถใช้เพื่อสร้างโทเค็น!

การโทรคือ:

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

ซึ่งให้โทเค็นกลับเข้าไปในเนื้อความการตอบกลับ HTTP และสามารถส่งไปยังการร้องขอเพิ่มเติมใด ๆ ไปยังทรัพยากรที่ปลอดภัยโดยไม่ได้รับพร้อมท์สำหรับข้อมูลประจำตัวอีกครั้ง โทเค็นต้องเป็นค่าสำหรับCookieส่วนหัวคำขอเนื่องจากถูกเก็บไว้ในคุกกี้ในฝั่งไคลเอ็นต์ในปัจจุบัน

แต่ ... ด่า ! โทเค็นตัวสร้างนี้ไม่ได้เป็นส่วนหนึ่งของ ArcGIS Server REST API !!! ฉันหามันไม่พบในเอกสาร API ออนไลน์ ! ฉันจะหาเจอที่ไหนในโลก

ซึ่งหมายความว่าเซิร์ฟเวอร์ ArcGIS ไม่มีกรอบการรับรองความถูกต้อง RESTful

ตัวอย่างเช่นหากเราให้บริการแผนที่นี้ภายใต้ ArcGIS REST API: /arcgis/rest/services/myDir/myMapService/MapServer/layersและเราพยายามที่จะรับทรัพยากรนี้สิ่งที่เราได้รับจาก ArcGIS Server คือการตอบสนองที่มี200: OKรหัสสถานะและเอกสาร HTML ในเนื้อหา (HTML เป็นรูปแบบการเข้าสู่ระบบ ) จากการเข้าสู่ระบบจะเป็นที่สงบฉันคาดว่าคำขอจะให้401: Authentication Requiredรหัสสถานะพร้อมกับWWW-Authenticateส่วนหัว ... ฉันทดสอบสิ่งทั้งหมดนี้ด้วยตัวเองโดยใช้โปรแกรมไคลเอนต์ REST


3
การใช้งาน "RESTful" ที่น่าเศร้าที่สุดไม่ใช่ RESTful :) หลายปีที่ผ่านมาฉันยอมแพ้ในเรื่องนี้อย่างเข้มงวดเพราะความจริงก็คือการใช้งานส่วนใหญ่นั้นเป็น สำหรับกรณีการใช้งานเฉพาะของคุณฉันมักจะใช้วิธีการที่แตกต่างกัน ฉันใช้ระบบตรวจสอบความถูกต้องในตัวของตัวเลือกและการร้องขอ ArcGIS แบบเปิดพรอกซี ดังนั้นถ้าฉันจัดการการพิสูจน์ตัวตนด้วยระบบอัตโนมัติของ Django หรือ ruby ​​หรือ. net หรืออะไรก็ตามฉันจะใช้ระบบนั้น จากนั้นเมื่อระบบดังกล่าวบอกว่าตกลงคุณสามารถพร็อกซีคำขอไปยังเซิร์ฟเวอร์ / พอร์ตภายใน ArcGIS ที่ถูกล็อคจากโลกภายนอก
Ragi Yaser Burhum

2
สวัสดี @Ragi Yaser Burhum คุณพูดถูก: เราจะไม่มีวันอยู่ในโลกที่สงบสุขอย่างเต็มที่ ;-) ฉันคิดว่าวิธีการของคุณเหมือนกัน: ฉันชอบความคิดที่จะมีพร็อกซี (ซึ่งสามารถจัดการการร้องขอไปยังเว็บเซิร์ฟเวอร์อื่น ๆ เช่นกัน) แต่ฉันต้องการรักษาความซับซ้อนของสถาปัตยกรรมทั้งหมดให้ต่ำที่สุด ดังนั้นหลังจากค้นพบว่ามีวิธีตรงในการรับรองความถูกต้องของผู้ใช้กับโปรแกรม mapservices ฉันจะเดินมัน! ขอขอบคุณ!
csparpa

อาจเป็นคำถามที่เก่าเกินไป แต่หวังว่าคุณจะเห็น Esri REST API ตอนนี้มีวิธี GenerateToken: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Nathan Wu

7

โปรดดูวิธีการทำงานของ ArcGIS Server Security

โดยทั่วไปคุณจะต้องสร้างผู้ใช้และกลุ่มและให้สิทธิ์ผู้ใช้เฉพาะผ่านบริการบางอย่าง

เมื่อคุณทำเช่นนั้นคุณจะต้องใช้ความปลอดภัยจาก Token ในแอปพลิเคชัน JavaScript ของคุณ สิ่งนี้หมายความว่าคุณถามผู้ใช้สำหรับชื่อผู้ใช้และรหัสผ่านของพวกเขา ที่ถูกส่งไปยังเซิร์ฟเวอร์ ArcGIS ซึ่งตรวจสอบข้อมูลรับรองและส่งโทเค็นกลับมา โทเค็นนี้ใช้เพื่อตรวจสอบความถูกต้องของผู้ใช้ทุกครั้งที่มีการร้องขอทรัพยากร

คุณในฐานะโปรแกรมเมอร์จะส่งโทเค็นนี้ไปยังทุกบริการแผนที่บริการสอบถาม ฯลฯ

รายละเอียดหน้านี้วิธีการใช้Token บริการตาม

ArcGIS Javascript API มาพร้อมกับ Class ซึ่งเป็นIdentityManagerในการทำเช่นนี้

ต่อไปนี้เป็นตัวอย่างบางส่วนเกี่ยวกับวิธีใช้ Identity Manager


3

ใน ArcGIS API สำหรับ JavaScript มีวิดเจ็ตที่เรียกว่าIdentity Managerที่จัดการสิ่งที่คุณต้องการ ดูตัวอย่างที่ใช้ตัวจัดการข้อมูลประจำตัวเพื่อดูวิธีการทำงาน

ตัวอย่างที่เชื่อมโยงโดย Devdatta ในขณะที่ถูกต้องนั้นเป็นวิธีการก่อนตัวจัดการข้อมูลประจำตัวของการทำเช่นนี้และเกี่ยวข้องกับรหัสจำนวนมากที่จำเป็นในขณะนี้ว่าการรับรองความถูกต้องสำหรับบริการที่ปลอดภัยจะถูกอบเข้าสู่ API


1
ฉันเพิ่งใช้ลิงค์ตัวอย่างสำหรับเอกสารของ ESRI สามารถปรับปรุงเอกสารให้ชี้ไปที่ตัวอย่างใหม่ได้หรือไม่?
Devdatta Tengshe

2
คนขอบคุณสำหรับคำแนะนำของคุณ แต่ฉันคิดว่าคุณไม่ได้รับจุดของฉัน สถานการณ์คือ: ผู้ใช้ของฉันกำลังเข้าถึงการบริการแผนที่ที่ปลอดภัย N ซึ่งหมายความว่าเขาจะต้องถูกรบกวน N ครั้งด้วยการแจ้งเตือนการเข้าสู่ระบบ เนื่องจากสามารถเข้าถึง Mapservices ของผู้ใช้ทั้งหมดโดยใช้ข้อมูลรับรองเดียวกันฉันต้องการให้แอปของฉันถามเพียงครั้งเดียวสำหรับพวกเขาแล้วใช้พวกเขาเพื่อตรวจสอบสิทธิ์แต่ละครั้งโดยอัตโนมัติ ในขั้นตอนนี้ฉันเดาว่าฉันควรใช้หน้าพร็อกซีเพื่อจัดการ Mapservice auth หลายรายการด้วย ArcGIS Server ฟังดูเข้าท่า? ทางเลือกที่ตรงไปตรงมามากขึ้น? ขอบคุณล่วงหน้าหวังว่าฉันจะตอบสนองความต้องการของฉันอย่างชัดเจน ..
csparpa

2

คุณยังสามารถใช้พร็อกซีได้ดังนั้นแอปพลิเคชันของคุณจะไม่ถามชื่อผู้ใช้และรหัสผ่าน และคุณไม่จำเป็นต้องตั้งค่าโทเค็นให้เข้าถึงบริการที่ปลอดภัยทุกครั้งที่คุณเข้าถึง สิ่งเดียวที่คุณต้องทำคือในไฟล์ JS ของคุณตั้งค่าต่อไปนี้: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (เช่น. http: //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = true; และในไฟล์ proxy.config ของคุณให้บริการทั้งหมดที่คุณกำลังใช้ในแอปพลิเคชันของคุณ
อ้างอิงhttps: //github.com/Esri/resource-proxy/สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับพร็อกซีเมื่อคุณต้องการการรับรองความถูกต้องโดยใช้โทเค็นในไฟล์ proxy.config ของคุณคุณจะต้องเพิ่ม URL ชื่อผู้ใช้รหัสผ่านและเนื้อหาทั้งหมดที่ตรงกันเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.