2013-02-01 18 views
10

पर आधारित अपाचे अनुमतियां मेरे पास एक अपाचे सर्वर है जहां प्रमाणीकरण की आवश्यकता है, लेकिन कुछ कॉल हैं जिन्हें सभी के लिए अनुमति दी जानी चाहिए।क्वेरीस्ट्रिंग

/foo/api.php?Token=123 & टास्क = DoStuff & परिणाम = json

मुझे लगता है कि सिखाया:

पर इन कॉल बंद उदाहरण के लिए एक क्वेरी स्ट्रिंग पर आधारित है एक स्थानमैच के साथ यह काम करेगा, इसलिए मैंने इस कॉन्फ़िगरेशन को काम किया:

<LocationMatch ^/foo/api.php\?.*(Task=DoStuff).*> 
    Order Allow,Deny 
    Allow from All 
</LocationMatch> 

लेकिन यह मुझे मुझे पास करने नहीं देता है प्रमाणीकरण (जिसका अर्थ है कि मुझे 401 मिलते हैं)। अगर मैं सिर्फ ^/foo/api.php फ़िल्टर करता हूं तो मुझे प्रमाणीकरण पारित होता है, लेकिन यह पर्याप्त सख्त नहीं है।

किसी को भी कोई विचार है कि क्वेरीस्ट्रिंग में कार्य पैरामीटर को जांचने के लिए इसे कॉन्फ़िगर कैसे करें?

प्रमाणीकरण हम Kerberos उपयोग कर रहे हैं के लिए, यह पूरी साइट पर मजबूर किया जाता है यह रोकने

LoadModule auth_kerb_module modules/mod_auth_kerb.so 

<Directory /var/www/html> 
    Options FollowSymLinks 
    AllowOverride All 
    AuthType Kerberos 
    Require valid-user 
    AuthName "Kerberos Login" 
    KrbMethodNegotiate on 
    KrbMethodK5Passwd on 
    KrbAuthRealms FOO.LOCAL 
    KrbServiceName HTTP/[email protected] 
    Krb5KeyTab /etc/httpd/conf/http.keytab 
    Satisfy Any 
    Order deny,allow 
    Deny from all 
    Allow from 192.168.72.90 
    Allow from 192.168.72.91 
    Allow from 192.168.72.94 
    Allow from 192.168.72.95 
    Allow from 127.0.0.1 
</Directory> 

उत्तर

10

के लिए हमारे conf है आप here पढ़ सकते हैं के रूप में:

< स्थान >, < स्थान मैच >, < निर्देशिका > और < निर्देशिका मैच > अपाचे निर्देश हमें उच्च प्रमाणीकरण, लेकिन के साथ संसाधनों के विशिष्ट पैटर्न के प्रमाणीकरण/प्रमाणीकरण को लागू करने की अनुमति देते हैं, लेकिन हमें क्वेरी-स्ट्रिंग स्तर पर नियंत्रण न दें।

इसलिए, आपको लक्ष्य प्राप्त करने के लिए mod_rewrite का उपयोग करना होगा।
उदाहरण के लिए:,

मैं सिर्फ फ़िल्टर करते हैं ^/foo/api.php मैं प्रमाणीकरण पारित कर दिया हो:

RewriteEngine on 
RewriteCond %{QUERY_STRING} Task=DoStuff 
RewriteRule ^/foo/api.php - [E=no_auth_required:1] 

<LocationMatch ^/foo/api.php> 
     Order allow,deny 
     Allow from env=no_auth_required 
     AuthType Basic 
     AuthName "Login Required" 
     AuthUserFile /var/www/foo/.htpasswd 
     require valid-user 
     Satisfy Any 
</LocationMatch> 

अद्यतन

आपको लगता है कि कहा गया है गया है लेकिन यह पर्याप्त सख्त नहीं है।

फिर, अपने विन्यास के लिए निम्न पंक्तियाँ जोड़ने का प्रयास करें:

RewriteEngine on 
RewriteCond %{QUERY_STRING} Task=DoStuff 
RewriteRule ^/foo/api.php - [E=no_auth_required:1] 

<LocationMatch ^/foo/api.php> 
     Order allow,deny 
     Allow from env=no_auth_required 
</LocationMatch> 
+0

मैं इस पर गौर करेंगे, मैं जोड़ लिया है चाहिए कि हम प्रमाणीकरण के लिए auth_kerb उपयोग कर रहे हैं, समस्या अब मैं आ रही हैं कि वह auth_kerb पहले क्या कर रहा है और उसके बाद mod_rewrite – Frederiek

+0

@Frederiek है है 'स्थानमैच' अनुभाग के अंदर या बाहर आपके अपाचे कॉन्फ़िगरेशन फ़ाइल में 'ऑथ टाइप कैर्बेरोस' निर्देश? क्या आप अंततः कॉन्फ़िगरेशन के बारे में और जानकारी प्रदान कर सकते हैं जिसका आप उपयोग कर रहे हैं? शायद [यह उत्तर] (http://serverfault.com/questions/404149/how-can-i-disable-kerberos- प्रमाणीकरण-for-only-the-root-of-my-site) भी उपयोगी हो सकता है। –

+0

मूल प्रश्न में संपादित देखें। मैंने conf फ़ाइल को शामिल किया है – Frederiek

1

वहाँ फिर से लिखने के बिना यह करने के लिए एक आसान तरीका है।

QUERY_STRING तक मिलान करने के लिए आप LocationMatch का उपयोग कर सकते हैं, और फिर की सामग्री से मेल खाने के लिए If ब्लॉक का उपयोग करें। अर्थात।, कुछ इस तरह:

<LocationMatch "^/foo/api.php"> 
    <If "%{QUERY_STRING} =~ /.*Task=DoStuff.*/" > 
     Order Allow,Deny 
     Allow from All 
    </If> 
</LocationMatch> 
+0

'' एक अपाचे 2.4 सुविधा है, और 'ऑर्डर'/'अनुमति 'अपाचे 2.2 विशेषताएं हैं। यह काम कर सकता है अगर आप इसके बजाय सिंटैक्स की आवश्यकता है, लेकिन केवल 2.4 पर। – noobish

संबंधित मुद्दे