2012-04-20 24 views
20

Tôi đã đọc qua RFC 2617 và không thể tìm thấy ở đó hoặc bất kỳ nơi nào khác, dấu phân cách là gì nếu nhiều lược đồ được hỗ trợ. Ví dụ, giả sử cả Basic và Digest đều được hỗ trợ. Tôi hiểu rằng nó có thể xuất hiện theo cách này:Dấu phân cách cho WWW-Xác thực cho nhiều sơ đồ là gì?

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Basic 
WWW-Authenticate: Digest 

Nhưng tôi cũng đã đọc rằng cả hai có thể được liệt kê như là một dòng, nhưng không ai thấy một ví dụ hoặc mô tả những gì delimiter để sử dụng. Tôi đã nhìn thấy cảnh báo rằng dấu phẩy có thể được sử dụng trong vòng một chương trình duy nhất:

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Digest param1="foo", param2="bar" 

Tôi cũng đã đọc rằng nếu dấu phẩy được sử dụng trong một chương trình, đó là chương trình khác phải được đặt trên dòng riêng biệt. Vì vậy, tôi tưởng tượng trong trường hợp trên nếu chúng tôi thêm Cơ bản, nó sẽ xuất hiện như sau:

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Digest param1="foo", param2="bar" 
WWW-Authenticate: Basic 

Đơn giản là đủ. Nhưng bây giờ giả sử bạn chỉ có một dòng

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Scheme stuff, morestuff, more stuff 

Đó là cái nào? Đó có phải là danh sách lược đồ được phân tách bằng dấu phẩy hoặc là một sơ đồ, với một vài tham số không?

Trả lời

23

Theo như tôi có thể biết, the spec punts về vấn đề này. Mục 1.2 trạng thái:

Lưu ý: các đại lý người dùng sẽ cần phải chăm sóc đặc biệt trong phân tích cú pháp WWW-
Authenticate hoặc giá trị Proxy-Authenticate lĩnh vực tiêu đề nếu nó chứa
nhiều hơn một thách thức
, hoặc nếu có nhiều hơn một trường tiêu đề WWW-Authenticate
được cung cấp, vì nội dung của thử thách có thể tự nó
chứa danh sách thông số xác thực được phân cách bằng dấu phẩy.

Tôi nghĩ chúng ta có thể dịch chăm sóc đặc biệt-best of luck chap.

Chủ nghĩa thực dụng
Như một vấn đề thực tế, tôi nghi ngờ nhiều chương trình có nghĩa là ta nên sử dụng nhiều wwww-authenticate tiêu đề. Đề án có thể mở rộng; ví dụ: tôi có thể đưa ra một kế hoạch được gọi là "dâu tây" hoặc "mờ đục" nếu tôi muốn trở thành nham hiểm. Với điều này, không có cách nào tốt để phân tích cú pháp một lớp lót mà không có một số dấu phân cách 'lược đồ chấm dứt'.

Thảo luận W3C
Bạn không phải là người đầu tiên có câu hỏi này. Có was a discussion trên danh sách gửi thư của W3C. Áp phích đã nêu:

Tôi không đặt câu hỏi về việc cần phải cung cấp nhiều thách thức trong một phản hồi đơn . Tôi chỉ đặt câu hỏi về sự khôn ngoan trong việc cho phép nhiều thách thức trong một trường tiêu đề duy nhất, với sự kết hợp lẻ của các dấu phân cách mà nó tạo ra.

Một số chủ đề khác thảo luận về các vấn đề hiện tại & hành động trong tương lai mà có thể quan tâm:

Nếu chỉ ...
Không phải là tôi có dạ dày cho nó, nhưng người ta có thể khai thác thông qua các chromimum, firefox & đang webkit để xem cách những cộng đồng đã xử lý vấn đề này.

+1

Vâng, có vẻ như WinInet không xử lý nhiều lược đồ xác thực trên một tiêu đề duy nhất. Tôi không hồi hộp về nó, nhưng tôi nghĩ rằng tôi có thể chạy dịch vụ trên nhiều thiết bị đầu cuối, một dịch vụ chỉ hỗ trợ Basic và một chỉ hỗ trợ Thương lượng và yêu cầu khách hàng thử dịch vụ chỉ hỗ trợ Thoả thuận trước tiên và nếu điều đó không thành công , chuyển sang Basic. – bpeikes

+0

Sử dụng tài nguyên khác cho một loại lược đồ xác thực khác có vẻ không hữu ích đối với tôi. Sau khi tất cả, bạn muốn mã hóa tiêu đề trong một phản hồi '401 trái phép ', nếu khách hàng cố truy cập một tài nguyên cụ thể chưa được xác thực. Ngoài ra: Khái niệm về các điểm cuối cho thấy sự thiếu hiểu biết về kiến ​​trúc REST của HTTP. Trên web, chúng ta có các điểm vào. – aef