11

Tôi hiện đang phát triển tiện ích mở rộng chrome, tôi cần truy cập một số tài nguyên được bảo vệ http-auth (webdav). Xác thực HTTP đang sử dụng (trong trường hợp tốt nhất) là xác thực thông báo.Tránh cửa sổ bật lên HTTP auth trong tiện ích mở rộng chrome (thông báo)

Tôi có thể thực hiện xác thực trực tiếp trong yêu cầu ajax bằng cách sử dụng biểu mẫu https://login:[email protected]/path/to/ressource.

Vấn đề là: nếu thông tin đăng nhập/mật khẩu sai, tôi không thể chỉ nhận trạng thái 401 (trái phép), Chrome bật lên hộp thoại xác thực thông thường. Mà tôi không muốn gây ra nó gây nhầm lẫn cho người dùng và tôi không thể lưu các thông tin đăng nhập từ đây.

EDIT: Một trường hợp sử dụng khác mà tôi phải đối mặt là: Tôi muốn kiểm tra xem tài nguyên có được bảo vệ bằng mật khẩu mà không cố cung cấp thông tin đăng nhập để truy cập thực tế không.

Bất kỳ ý tưởng nào về cách bắt 401 mà không cần bật hộp xác thực của Chrome?

Trả lời

4

Các nhóm Google Chrome đã ngụ ý sự kiện onAuthRequired trong Google Chrome 22, vì vậy hiện có thể phát hiện khi yêu cầu Xác thực cơ sở HTTP.

Trong thực tế, tôi đã viết một tiện ích tự động gửi thông tin đăng nhập Xác thực HTTP cơ bản bằng sự kiện onAuthRequired.

Nó có sẵn miễn phí trong các cửa hàng trên web của Google Chrome chính thức: https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn

Cách sử dụng ví dụ về sự kiện onAuthRequired:

sendCredentials = function(status) 
{ 
    console.log(status); 
    return {username: "foo", password: "bar"}; 
} 

chrome.webRequest.onAuthRequired.addListener(sendCredentials, {urls: ["<all_urls>"]}, ["blocking"]); 

Bạn cần phải thêm đủ quyền hạn để file manifest để sử dụng onAuthRequired.

"permissions": [ "http://*/*", "https://*/*", "webRequest", "webRequestBlocking", "tabs" ], 

Tải xuống tiện ích mở rộng và kiểm tra mã nguồn để có cách tiếp cận tốt hơn.

Nó sẽ hoạt động ngay cả khi yêu cầu được bắt đầu từ tiện ích mở rộng khác.

+0

Có vẻ tốt đẹp, Cảm ơn! Xin vui lòng, một người nào đó để xác nhận/xác nhận điều đó? (Tâm trí của tôi bây giờ là xa những mối bận tâm, vì vậy tôi sẽ không bản thân mình). –

+1

Xin chào, tôi muốn cho bạn biết rằng mã này cần được cập nhật. Bạn cần phải trả lại một đối tượng như sau: return {authCredentials: {username: 'XXX', mật khẩu: 'XXX'}} Ít nhất đó là những gì hiệu quả đối với tôi. –

0

Tôi nghĩ điều này là không thể. Nếu bạn đang sử dụng ứng dụng khách http của trình duyệt thì nó sẽ nhắc người dùng xác thực trên 401.

CHỈNH SỬA: Trên mặt đất mozilla https://developer.mozilla.org/en/XMLHttpRequest xem "mozBackgroundRequest".

+0

Tôi sợ như vậy: -x.Quá tệ, dường như không có cách nào để truy cập webdav * suôn sẻ * từ tiện ích mở rộng. –

3

Nó thực sự có vẻ là một thiếu trong hành vi chrome, những người khác đang có nhu cầu để xem một cái gì đó như mozBakgroundRequest Chris đánh dấu, đã có một một bug report for that.

Có (hackish) cách giải quyết đề nghị của một số nhà phát triển trong bugtracker:

  • sử dụng một WebWorker và một thời gian chờ để thực hiện các yêu cầu
  • làm tương tự với trang nền

Trong cả hai trường hợp, lợi ích là nó sẽ không bật một hộp xác thực ... Nhưng bạn sẽ không bao giờ biết nếu đó là một thời gian chờ máy chủ thực sự hoặc 401. (Tôi đã không thử nghiệm những cách giải quyết).

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