2014-07-03 43 views
7

CORS'te yeniyim ve tarayıcı tarafından gönderilen OPTIONS ön kontrol isteğinin kullanıcı kimlik bilgilerini içermediğini öğrendim. Filtreyi (httpd.conf içinde) OPTIONS isteklerine farklı yanıt vermek için, yani kimlik doğrulamasını atlatmak için nasıl alabilirim?CORS - Apache'nin httpd.conf dosyasında OPTIONS ön kontrol talebi için kimlik doğrulamasını nasıl yok saymayı nasıl önleyebiliriz?

Bu benim şimdiki yapılandırma:

<LocationMatch /api> 
SetEnvIfNoCase Origin "https://(www\.)?(domain1\.com|domain2\.com)(:\d+)?$" AccessControlAllowOrigin=$0 
Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
Header set Access-Control-Allow-Credentials "true" 
Header set Access-Control-Allow-Methods "GET,POST,DELETE,OPTIONS" 
Header set Access-Control-Allow-Headers "Accept, Authorization, Origin, Content-Type" 
AuthFormProvider ldap 
AuthLDAPURL "ldap://localhost:10889/ou=Users,dc=work,dc=com?uid" 
AuthLDAPGroupAttribute member 
AuthLDAPGroupAttributeIsDN on 
Require valid-user 
ErrorDocument 401 /login.html 
ErrorDocument 500 /error.html 
AuthType form 
AuthName realm 
Session On 
SessionMaxAge 1800 
SessionDBDCookieName session path=/ 
ProxyPass http://localhost:8080 timeout=31536000 
AuthFormFakeBasicAuth On 
</LocationMatch> 

Ve istekte javascript: Ben follwoing ama hiçbir şans ile denedim

$.ajax({ 
     type : "DELETE", 
     url : "https://www.domain1.com/api", 
     xhrFields: { 
      withCredentials: true, 
     }, 
     success : function(data){ 

     }, 
}); 

:

(a)

RewriteEngine On 
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}] 

(b)

<Limit OPTIONS> 
Header always set Access-Control-Allow-Origin "*" 
Header always set Access-Control-Allow-Credentials "false" 
Header always set Access-Control-Allow-Headers "Accept, Authorization, Origin, Content-Type" 
Header always set Access-Control-Allow-Methods "GET,POST,DELETE,OPTIONS,PUT" 
</Limit> 

(c)

<Limit OPTIONS> 
Allow for all 
</Limit> 

(d)

SetEnvIfNoCase Request_Method OPTIONS allowed 

bir fikrin? Lütfen yardım et !

+0

Burada _is_ ilk olarak yer imi gerektiren yapılandırmanın parçası nedir? – CBroe

+0

'Herkes için izin ver 'yerine _FROM_ olmalı ve' SATISFY ANY 'ile birleştirmeniz gerekecek, böylece" İZİN "yönergesi veya" REQUIRE "seçeneği" OPTIONS "isteği için geçerlidir. – CBroe

+0

Teşekkürler ama yine de 401 Yetkisiz. – user3802087

cevap

5

Bugün çözdüğüm aynı sorunu this question yardımıyla aldım. Temel olarak seçeneğiniz c.

Benim conf yapısı şöyledir:

<Directory "/var/www/api"> 
    AllowOverride All 
    Options FollowSymLinks 

    <LimitExcept OPTIONS> 
    Auth stuff here 
    Mainly your Require statements 
    </LimitExcept> 
</Directory> 

Sonra .htaccess dosyasında belirlediğim başlıkları:

conf/httpd.conf <- normal stuff 
conf.d/ssl.conf <- set up ssl stuff 
conf.d/api.conf <- set specific stuff to api like Auth 
/var/www/.htaccess <- set specific stuff to api again 

Bu SEÇENEKLERİ

/conf.d/api.conf dosya hariç her şeyi sınırlandırılması için izin verir.

The Apache manual Gereksinim yönergesi durumlarında "Bu şekilde uygulanan erişim denetimleri, tüm yöntemler için etkilidir. Normal olarak istenen budur. Erişim denetimini yalnızca belirli yöntemlere uygulamak istiyorsanız, diğer yöntemleri korumasız bırakırsanız, Ardından Require ifadesini <Limit> [veya <LimitExcept>] bölümüne yerleştirin.

Bu kurulumun otomatik bir dönüş yapmamasından dolayı uygulamamın OPTIONS işlemlerini gerçekleştirebildiğinden emin olmalıydım. Here veya here Biri, uygulamada bir şeyler yapmak yerine çalışabilecekleri yeniden yönlendirmeyi nasıl görebilir.

İlgili konular