2009-10-27 4 views
5

Điều này là không thể tin được! Các lập trình viên flash đã quen thuộc với ví dụ:Xác thực cơ bản bằng Flash

var req:URLRequest = new URLRequest("http://yoursite.com/yourservice.ext"); 
req.method = URLRequestMethod.POST; 
req.data = new URLVariables("name=John+Doe"); 

var encoder:Base64Encoder = new Base64Encoder();   
encoder.encode("yourusername:yourpassword"); 

var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString()); 
req.requestHeaders.push(credsHeader); 

var loader:URLLoader = new URLLoader(); 
loader.load(req); 

OK ... tuyệt vời ... thực sự hoạt động. Như bạn có thể thấy, tôi thêm thủ công quyền cấp phép tiêu đề cho xác thực HTTP cơ bản. NHƯNG ... nếu tôi thay đổi yêu cầu metod từ POST để GET, tiêu đề không được tạo ra.

Có ai biết giải pháp không? 1000x thx!

+0

Tôi đã tìm thấy điều này: http://www.abdulqabiz.com/blog/archives/2006/03/03/http-authentication-for-httpget-requests-using-actionscript-3/ – xpepermint

Trả lời

4

Tôi ngạc nhiên vì bạn thậm chí có thể làm cho nó hoạt động với yêu cầu POST. Vào tháng 12 năm 2007, Flash Player đã được cập nhật để không cho phép rõ ràng số Authorization header. Tôi đoán có thể là họ đã cho phép lại nó. Nhưng tôi sẽ ngạc nhiên bởi điều đó. Chỉnh sửa: theo nhận xét của @ derFunk, hóa ra thực tế tiêu đề sau đó đã được cho phép lại, mặc dù khi gửi nó đến một tên miền khác, nó phải được cho phép rõ ràng trong crossdomain.xml.

Ngoài các vấn đề cụ thể với tiêu đề Authorization, tôi chắc chắn rằng Flash Player sẽ chỉ gửi tiêu đề yêu cầu tùy chỉnh với yêu cầu POST. Tôi xin lỗi tôi không có liên kết, nhưng tại công ty của mình, chúng tôi sử dụng Flash Player để làm việc với các dịch vụ web Restful và chúng tôi phải triển khai tất cả các loại giải pháp để làm mọi thứ hoạt động.

Tóm lại, Flash Player có khủng khiếp hỗ trợ cho HTTP. Thực tế, bộ giải pháp thay thế của chúng tôi được kích hoạt bằng cách gửi tiêu đề yêu cầu X-Crippled-Client: true, thông báo cho các dịch vụ của chúng tôi giải thích các yêu cầu và gửi phản hồi theo cách bị xáo trộn. Đó là một nỗi đau thực sự ở mông.

Rất tiếc, tôi không thể hữu ích hơn ... chúc bạn may mắn!

+1

Thêm chi tiết về Tiêu đề ủy quyền có thể tìm thấy ở đây: http://helpx.adobe.com/flash-player/kb/authorization-header-request-flash-player.html: "Bắt đầu với Adobe Flash Player 9.0.115.0 tiêu đề Cấp quyền đã được thêm vào danh sách đen của các tiêu đề HTTP và, chỉ trong phiên bản này, đã bị Flash Player chặn. Đối với các phiên bản Flash Player sau 9.0.115.0, tiêu đề Cấp quyền không được chặn, nhưng tên miền đích yêu cầu tệp crossdomain.xml để chỉ định rằng tiêu đề Cấp phép được cho phép, nếu nó khác với tên miền lưu trữ tệp SWF. " – derFunk

+0

@derFunk thông tin tuyệt vời, cảm ơn! –

3

@Flax: yup, tôi không thể đồng ý nhiều hơn về bảo mật flash với tiêu đề HTTP. Nhưng có một cách khác để làm điều này, nhưng điều đó đòi hỏi một chút công việc. Hãy thử sử dụng Socket thay vì URLLoader, vì Socket không có các loại hạn chế đó. Vì vậy, đối với yêu cầu HTTP, hãy mở một ổ cắm đến cổng 80 của máy chủ (http://yoursite.com/). Ngay sau khi nó được kết nối với máy chủ, gửi tất cả các tiêu đề yêu cầu http của bạn. Sau đó, trên SocketDataEvent, phân tích dữ liệu và đọc (hoặc loại bỏ) các tiêu đề phản hồi và tiến hành với dữ liệu.

+0

Yea. .. Tôi đã làm điều này ... nhưng bây giờ tôi có vấn đề với an ninh crossdomain :) Sockets sẽ làm các trick cho các máy chủ không HTTP như máy chủ trò chuyện, nơi bạn có thể manualy đáp ứng flash với crossdomain (ví dụ: http://coderslike.us/ 2009/01/23/flash-socket-code-và-crossdomain-policy-serve /) – xpepermint

+1

ở đây bạn có thể sử dụng Security.loadPolicyFile ("http://www.yoursite.com/crossdomain.xml"); trước khi kết nối trên Socket. – bhups

0

Bạn cũng có thể gửi tiêu đề bằng phương thức GET, trừ khi bạn thử nghiệm trên Trình gỡ lỗi Flash Player độc lập (không kiểm tra đơn giản) v.11.4.402.265. Nếu bạn mở swf địa phương của bạn trong trình duyệt nó hoạt động tốt quá.

2

Vì vậy, đây là siêu cũ nhưng nó đã đưa ra trong khi tôi đã tìm kiếm một cách để sử dụng Parse.com với Flash Player.

Tôi bối rối rằng điều này thực sự hiệu quả, nhưng để Flash nhận tiêu đề trong lệnh GET, chỉ cần đặt tiêu đề làm POST, nhưng chạy ghi đè.

req.requestHeaders.push(new URLRequestHeader("X-HTTP-Method-Override", URLRequestMethod.GET)); 

Tôi đã cố gắng nghĩ rằng điều đó thật điên rồ và không thể hoạt động được, nhưng đúng vậy!