12

Jak wyglądałoby preflightowane żądanie HTTP, jeśli uwzględnisz podstawowe uwierzytelnianie? Jak ta rozmowa? Im kłopoty aby zrozumieć, które nagłówki muszą być wysyłane gdzie, również dlatego, że jej nie można go debugować poprawnie z FirebugCORS i HTTP basic auth

klient:

OPTIONS /api/resource HTTP/1.1 
Access-Control-Request-Method: GET 
Origin: http://jsconsole.com 

Server:

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 
Access-Control-Max-Age: 1728000 
Access-Control-Allow-Credentials: true 

Klient:

GET /api/resource HTTP/1.1 
Access-Control-Request-Method: GET 
Access-Control-Allow-Credentials: true 
Origin: http://jsconsole.com 

Serwer:

HTTP/1.1 401 Unauthorized 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 
Access-Control-Max-Age: 1728000 
Access-Control-Allow-Credentials: true 
WWW-Authenticate: Basic realm="Authorisation Required" 

Klient:

GET /api/resource HTTP/1.1 
Access-Control-Allow-Credentials: true 
Authorization: Basic base64encodedUserAndPassword 
Access-Control-Request-Method: GET 
Origin: http://jsconsole.com 

Serwer: nagłówka odpowiedzi

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 
Access-Control-Max-Age: 1728000 
Access-Control-Allow-Credentials: true 
+0

Zobacz sekcję "CORS z podstawowym auth" w połowie artykułu na http://avalanche123.com/blog/2011/10/10/cross-domain-javascript-lessons-learned/ –

+0

Niestety blog lawinowy wpis jest nieaktualny. Chrome całkowicie obsługuje podstawowe uwierzytelnianie. IE jednak nie, chyba że bawisz się z ustawieniami bezpieczeństwa. – ianbeks

Odpowiedz

18

Jeśli żądasz poświadczeń to serwer musi reagować z określonego pochodzenia w Access-Control-Allow-Origin (i dlatego nie może używać symbolu wieloznacznego *). Oczywiście wtedy również musiałby odpowiedzieć nagłówkiem odpowiedzi Access-Control-Allow-Credentials.

+1

A nagłówki kontroli dostępu nie są wymagane. FF/Chrome działają bez niego. Jednak implementacja IE CORS nie obsługuje w ogóle podstawowego uwierzytelniania, chyba że korzystasz z jego ustawień bezpieczeństwa (Włącz żądania między domenami). – ianbeks

+1

Tak, to zależy od tego, jak robisz podstawowy autoryzator. Jeśli ręcznie utworzysz nagłówek autoryzacji, to masz rację, ale jeśli chcesz, aby przeglądarka go dostarczała, potrzebne są poświadczenia zezwolenia. –