2014-07-03 19 views
7

Tôi mới sử dụng CORS và đã biết rằng yêu cầu preflight preflight được gửi bởi trình duyệt loại trừ thông tin đăng nhập của người dùng. Làm cách nào để nhận bộ lọc (trong httpd.conf) phản hồi các yêu cầu OPTIONS khác nhau, tức là bỏ qua xác thực?CORS - cách bỏ qua xác thực cho OPTIONS yêu cầu preflight trong httpd.conf của Apache?

Đây là cấu hình hiện tại của tôi:

<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> 

Và javascript mà làm theo yêu cầu:

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

     }, 
}); 

Tôi đã thử các follwoing nhưng không có may mắn:

(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 

Bất kỳ ý tưởng? Hãy giúp tôi !

+0

Trường hợp _is_ phần cấu hình yêu cầu auth ở địa điểm đầu tiên? – CBroe

+0

'Cho phép cho tất cả' phải là _FROM_ thay vào đó, và bạn sẽ phải kết hợp nó với' SATISFY ANY', để chỉ thị 'ALLOW' hoặc' REQUIRE' áp dụng cho một yêu cầu 'OPTIONS'. – CBroe

+0

Cảm ơn nhưng vẫn trả về 401 Không được ủy quyền. – user3802087

Trả lời

5

Tôi đã gặp vấn đề tương tự mà hôm nay tôi đã giải quyết với sự trợ giúp của this question. Về cơ bản lựa chọn của bạn c.

cấu trúc conf của tôi là:

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 

Điều này cho phép hạn chế tất cả mọi thứ trừ OPTIONS

/conf.d/api.conf file:

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

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

Sau đó, trong tập tin .htaccess tôi thiết lập các tiêu đề.

The Apache manual trong trạng thái yêu cầu chỉ thị "Kiểm soát truy cập được áp dụng theo cách này có hiệu quả đối với tất cả các phương pháp. Đây là điều bình thường. Nếu bạn muốn áp dụng điều khiển truy cập chỉ cho phương pháp cụ thể, đồng thời để các phương pháp khác không được bảo vệ, sau đó đặt câu hỏi Yêu cầu vào mục <Limit> [hoặc <LimitExcept>]. "

Tôi phải đảm bảo rằng ứng dụng của tôi có thể xử lý OPTIONS vì thiết lập này không hoạt động trở lại tự động. Here hoặc here người ta có thể xem cách chuyển hướng có thể hoạt động thay vì có thứ gì đó trong ứng dụng xử lý nó.

Các vấn đề liên quan