2012-04-11 17 views
5

Tôi đã xem các câu hỏi sau đây ở đây trên stackoverflow mà không có may mắn trong những gì im đang cố gắng làm.Gửi tiêu đề ủy quyền với jquery và ajax

Ajax Authorization Request headers fails again and again

jQuery Ajax Unauthorized 401 Error

Sending credentials with cross-domain posts?

Đây là mã của tôi mà tôi hiện có:

$(document).ready(function() { 
     $.ajax({ 
      url: 'http://sample.domain.com/script.php?name1=value1&jsonp=?', 
      type: 'GET', 
      dataType: 'json', 
      contentType: "application/json", 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader("Authentication", "Basic ZnJvbWFwcGx********uOnRoM24zcmQ1UmgzcjM=") //Some characters have been replaced for security but this is a true BASE64 of "username:password" 
      }, 
      success: function(data){ 
       alert(data); 
      } 
     }); 
    }); 


</script> 

Các tên miền phụ tôi có là mật khẩu bảo vệ bởi một tập tin htpasswd. Việc đăng nhập của trang web hoạt động tốt cho tôi bằng cách sử dụng tên người dùng/mật khẩu kết hợp được sử dụng trong mã hóa base64.

Im chạy tập lệnh này trên một tên miền khác với tên miền mà url là lý do tại sao tôi có jsonp =? trong url

Các im phản ứng nhận được từ giao diện điều khiển trong trình duyệt là: GET http://sample.domain.com/script.php?name1=value1&jsonp=jsonp1334177732136 401 (Authorization Required)

+0

Tại sao bạn đang sử dụng auth cơ bản ở đây? JS của bạn sẽ trưng ra mật khẩu base64'd cho thế giới, vì vậy nó sẽ không cung cấp bất kỳ bảo mật nào. Hay tôi đã hiểu lầm tình hình của bạn? – jimw

+0

Thành thật mà nói, mọi phương pháp đều không an toàn thông qua HTTP. Đó là lý do tại sao HTTPS tồn tại. – freakish

+0

Bảo mật ở đây không phải là câu hỏi. Đây chỉ là một mẫu của những gì tôi có. Ive kéo cái này xuống cơ bản để thử và làm một cái gì đó để làm việc. Sau khi tôi đã làm việc cơ bản, Ill làm cho nó an toàn. – bretterer

Trả lời

4

JSONP sử dụng một proxy script tag. Nó sẽ không hỗ trợ tiêu đề tùy chỉnh. Bạn có kiểm soát điểm cuối không? Nếu vậy hãy xem xét cho phép CORS, hoặc vượt qua khóa xác thực trong chuỗi GET.

Khi sử dụng jsonp JQuery chuyển đổi URL của bạn "ajax" yêu cầu:

<script src="[endpoint]"></script> 

nó sau đó viết một hàm ngẫu nhiên

var json9409d0sf0d9s0df90 = function() { 
    //some callback logic here. 
} 

và gắn thêm callback = json9409d0sf0d9s0df90

máy chủ của bạn sau đó? nói

echo $_GET['callback] . "(" . $json . ")"; 

và gửi mà trở lại như phản ứng này lại

json9409d0sf0d9s0df90({some: data}); 

được exexcuted bởi trình duyệt và xử lý bởi bộ xử lý huyền diệu của jQuery mà làm cho nó đáp ứng như một callback ajax bình thường.

AFAIK, <script src=""></script> tải nội dung sẽ không lấy tiêu đề tùy chỉnh theo bất kỳ trình duyệt chuẩn nào.

5

Tên tiêu đề là Authorization, và bạn đang gửi "Authentication"

ví dụ

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtBmU =