OpenLayers 2.12 และ http การตรวจสอบความถูกต้องพื้นฐานของ woes


13

ฉันพยายามใช้ OpenLayers 2.12 เพื่อแสดงเลเยอร์ WMS จากเซิร์ฟเวอร์ที่เปิดใช้งานการตรวจสอบสิทธิ์พื้นฐาน HTTP

ฉันพยายามจัดการการรับรองความถูกต้องโดยใส่ชื่อผู้ใช้และรหัสผ่านในพารามิเตอร์ URL ในรหัส JavaScript ของฉัน ตัวอย่างการสร้างเลเยอร์:

myLayer = new OpenLayers.Layer.WMS('background',
        'https://username:password@ws.nls.fi/rasteriaineistot/image?',
        {
            layers: 'background',
            bbox: '-380188,6249943,1347312,8226943'
        },                                   
        {
            displayInLayerSwitcher: true,
            isBaseLayer: false,
            projection: 'EPSG:3067',
            visibility: true
        });

แน่นอนว่าสิ่งนี้ไม่ปลอดภัยเนื่องจากข้อมูลรับรองจะถูกเก็บไว้ในรหัส JavaScript และไม่สามารถใช้งานได้ในเบราว์เซอร์ทั้งหมด Internet Explorer 8 ให้ข้อผิดพลาดด้านความปลอดภัยชี้ไปที่ OpenLayers.js และปฏิเสธที่จะแสดงแผนที่เลย Firefox 13 แสดงกล่องโต้ตอบการตรวจสอบความถูกต้องซึ่งฉันสามารถยกเลิกได้ (แผนที่จะแสดงอย่างถูกต้องหลังจากนั้น) ใน Chrome 23 การตรวจสอบสิทธิ์ดูเหมือนว่าจะทำงานได้อย่างไร้ที่ติ

คุณยืนยันได้หรือไม่ว่าเป็นไปไม่ได้ที่จะจัดการกับการพิสูจน์ตัวตนพื้นฐาน HTTP ในลักษณะข้ามเบราว์เซอร์โดยการเข้ารหัสใน URL และมอบให้แก่ OpenLayers อย่างเช่น

คุณสามารถแนะนำวิธีอื่นในการจัดการการรับรองความถูกต้องพื้นฐาน HTTP เพื่อให้ทำงานได้อย่างโปร่งใสกับผู้ใช้ (ไม่มีป๊อปอัปการรับรองความถูกต้องแสดง) อาจใช้พร็อกซีเซิร์ฟเวอร์บางประเภทเพื่อแก้ไขปัญหานี้


2
คุณสามารถใช้พร็อกซี - docs.openlayers.org/library/request.htmlตัวอย่างพร็อกซี> collab.itc.virginia.edu/wiki/toolbox/ …
Mapperz

เท่าที่ฉันทราบวิธีเดียวในการจัดการการรับรองความถูกต้องใน OpenLayers คือการใช้ฟังก์ชัน OpenLayers.Request.issue () ( goo.gl/OKtGj ) ซึ่งไม่ตรงกับความต้องการของคุณ
dariapra

iluwatar> คุณเคยผ่านปัญหาที่ FireFox แสดงการรับรองความถูกต้องเข้าสู่ระบบหรือไม่? ในขณะที่คุณเขียนคุณสามารถกดยกเลิกที่ป๊อปอัป แต่มันสร้างความสับสนและสับสนให้กับผู้ใช้ปลายทางด้วยป๊อปอัปการตรวจสอบสิทธิ์
Mike001

คำตอบ:


7

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

โค้ดตัวอย่างสำหรับการสร้างเลเยอร์:

var layer = new OpenLayers.Layer.WMS( "background", "http://myproxyaddress.com/23ergwe435dw3463", {layers: 'basic'} );

ตัวอย่างการกำหนดค่าพร็อกซี Apache:

ProxyRequests     Off
ProxyPreserveHost On
SSLProxyEngine On
<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>
SetEnvIf Request_URI "23ergwe435dw3463" wms_provider_name
RequestHeader set Authorization: "Basic Xk12BLdVNzUo5UGl0po5Y" env=wms_provider_name
ProxyPass         /23ergwe435dw3463  https://wmsprovideraddress.com
ProxyPassReverse  /23ergwe435dw3463  https://wmsprovideraddress.com

คุณสามารถกำหนดค่าพร็อกซีได้หลายแบบโดยใช้สไตล์นี้

สิ่งที่คุณควรใส่ไว้ในเครื่องหมายคำพูดการอนุญาตเป็นเพียงการเข้ารหัส base-64 ของสตริง "ชื่อผู้ใช้: รหัสผ่าน" (โดยไม่มีเครื่องหมายคำพูด) สำหรับข้อมูลเพิ่มเติมดูลิงค์นี้: /programming/567814/apache2-reverse-proxy-to-an-end-point-th-that-requires-basicauth-but-want-to-hide-t


5

คุณสามารถส่งคำขอ ajax ปลอมก่อนที่จะเพิ่มเลเยอร์ในแผนที่ เบราว์เซอร์จะจัดการการรับรองความถูกต้องเบื้องต้นสำหรับคุณ:

// Assuming myLayer **WITHOUT** user:pass in the url
$.ajax({
    url: myLayer.url,
    data: myLayer.params,
    method: 'GET',
    error: function(jqXHR, textStatus, errorThrown){
        // Handle not authoruzed here
    },
    success: function(){
        // Yuppieeeeee!
        map.addLayer(myLayer);    // The browser wil set up the 
                                  // authentication in the request for you
    }

});

สิ่งนี้จะทำงานได้ก็ต่อเมื่อเซิร์ฟเวอร์คืนค่าส่วนหัว 401 - รับรองความถูกต้อง (ใน geoserver คุณต้องตั้งค่านโยบายความปลอดภัยเพื่อท้าทายหรือผสม)


รหัสการโทรอาแจ็กซ์ทำได้โดยใช้ jQuery ...
Tommaso

ฉันชอบที่จะรู้ว่าฉันต้องวางตรงไหน ในโครงการของฉันฉันใช้ GeoExt2, ExtJS 4.2 และ OpenLayers 2.12
g07kore

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