2016-04-26 20 views
6

Gần đây chúng tôi đã di chuyển ứng dụng API từ Azure Cloud Services sang Azure Websites và một số khách hàng vẫn đang sử dụng giao thức xác thực cũ của chúng tôi, sử dụng cookie (thay vì tiêu đề HTTP thông thường Authorization: Bearer). Chúng tôi cần hỗ trợ giao thức xác thực này lâu hơn một chút vì khách hàng sẽ không thể di chuyển ngay lập tức.Bật tiêu đề Access-Control-Allow-Credentials trong trang web Azure (Azure App Services)

Để hỗ trợ các tập tin cookie trong một yêu cầu ajax chéo nguồn gốc trực tiếp tới API, khách hàng cần phải thiết lập các thiết lập withCredentials để true trong XMLHttpRequest, và máy chủ cần phải repond với tiêu đề Access-Control-Allow-Credentials cũng như để bất kỳ yêu cầu CORS.

Vấn đề mà chúng tôi phải đối mặt là Trang web Azure quản lý CORS một mình và sử dụng cấu hình riêng của nó (được giới hạn trong danh sách nguồn gốc được phép) cho phản hồi, không cho phép đặt tiêu đề này .. do đó phá vỡ ứng dụng cho tất cả các máy khách Ajax của chúng tôi!

Có cách nào (tạm thời) thêm tiêu đề này vào câu trả lời không?

Trả lời

11

cuối cùng Chúng tôi quản lý để hiểu được hành vi của các middleware Azure Apps CORS. Để tắt tính năng này, bạn phải xóa mọi mục nhập gốc được phép duy nhất trong lưỡi CORS của ứng dụng web của bạn (bao gồm *). Sau đó, bạn có thể tự quản lý CORS, hoặc sử dụng chức năng Web Api 2 hoặc sử dụng web.config.

Các thông tin thậm chí còn có sẵn trong the documentation:

Đừng cố gắng sử dụng cả hai CORS API Web và App Dịch vụ CORS trong một ứng dụng API. Dịch vụ ứng dụng CORS sẽ được ưu tiên và Web API CORS sẽ không có hiệu lực. Ví dụ: nếu bạn bật một miền gốc trong Dịch vụ ứng dụng và bật tất cả các miền gốc trong mã API web của bạn, ứng dụng Azure API của bạn sẽ chỉ chấp nhận cuộc gọi từ miền bạn đã chỉ định trong Azure.

Vì vậy, câu trả lời cuối cùng là: Nếu ứng dụng của bạn không cần quản lý CORS rất cụ thể, bạn có thể sử dụng CORS Azure App Service. Nếu không, bạn sẽ cần phải tự mình xử lý và tắt tất cả cấu hình CORS trong ứng dụng web.

+0

Cảm ơn bạn! Tôi đã gặp rất nhiều rắc rối khi sử dụng CORS trong một ứng dụng servicestack được lưu trữ trên Azure. Nó chỉ ra loại bỏ cấu hình CORS từ cổng thông tin Azure cố định tất cả mọi thứ. –

+0

Lạ, nó cần phải có một chuyển đổi để vô hiệu hóa Azure cors, chỉ cần loại bỏ tất cả các trang web vô hiệu hóa nó và đi qua để ứng dụng của bạn. Nếu bất kỳ nguồn gốc nào được liệt kê, có vẻ như bạn sẽ xóa bất kỳ tiêu đề CORS nào khác mà bạn có (withcredenetials, methods, etc.).Tôi nghĩ rằng một số loại giải thích rằng việc nhập một trang web sẽ cho phép nó và những giá trị nó sẽ sử dụng cho những tiêu đề khác cần được cung cấp. Tôi nghĩ rằng nó sẽ cung cấp cho một số loại lỗi hoặc cảnh báo để tự động loại bỏ các tiêu đề của bạn quá ... –

1

Đây là thứ mà bạn có thể thực hiện trong tệp web.config có sẵn trong ứng dụng web của bạn.

Bạn có thể chỉnh sửa bằng cách sử dụng Visual Studio Online (Monaco) là Công cụ bạn thêm từ Azure Portal.

đọc thêm ở đây: http://enable-cors.org/server_iis7.html

+0

Tôi đã hoài nghi về phương pháp này vì tôi nghĩ phần mềm trung gian Azure Website CORS ghi đè tất cả các tiêu đề CORS được thiết lập bởi ứng dụng được lưu trữ để thiết lập riêng của nó, nhưng tôi sẽ thử điều này và cho bạn biết. –

+0

Đây là những gì tôi nghĩ, có một phần mềm trung gian của Azure giữa máy khách và máy chủ ứng dụng của chúng ta, nó chỉ làm giảm tất cả các tiêu đề liên quan đến CORS được thiết lập bởi máy chủ và thay thế chúng bằng chính nó, vì vậy thêm một tùy chọn 'Access-Control-Allow- Đầu trang Credentials' trong tệp web.config không có hiệu lực. Bất kỳ tiêu đề tùy chỉnh nào khác được thêm đúng, nhưng các tiêu đề CORS thì không. –

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