2012-04-20 10 views
20

Ho letto tramite RFC 2617 e non riesco a trovare lì o altrove quale sia il delimitatore se sono supportati più schemi. Ad esempio, supponiamo che sia Basic e Digest siano supportati. Capisco che possa apparire in questo modo:Qual è il delimitatore per l'autenticazione WWW per più schemi?

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

Ma ho anche letto che entrambi possono essere elencati come una sola riga, ma nessuno si presenta sempre un esempio o descrive cosa delimitatore da utilizzare. Ho le precauzioni che le virgole possono essere utilizzati all'interno di un unico schema visto:

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

Ho anche letto che se virgole sono utilizzati all'interno di uno schema, che gli altri regimi devono essere collocati su righe separate. Quindi immagino che nel caso di cui sopra, se abbiamo aggiunto di base sembrerebbe in questo modo:

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

Questo è abbastanza semplice. Ma ora supponiamo di avere solo una riga

Quale è? È un elenco di schemi delimitati da virgole, o è uno schema, con alcuni parametri?

risposta

23

Per quanto posso dire, the spec si interrompe. Sezione 1.2 recita:

Nota: I programmi utente sarà necessità di prestare particolare attenzione nel parsing del WWW-
autenticazione o Proxy-Authenticate campo di intestazione valore se contiene
più di una sfida
, o se più di un campo di intestazione WWW-
viene fornito, poiché il contenuto di una sfida può esso stesso
contenere un elenco separato da virgole di parametri di autenticazione.

penso che possiamo tradurre particolare attenzione-buona fortuna cap.

Pragmatismo
In pratica, ho il sospetto più schemi significa uno dovrebbe utilizzare più wwww-authenticate intestazioni. Gli schemi sono estensibili; ad es., posso inventare uno schema chiamato "fragola" o "opaco" se voglio essere sinistro. Detto questo, non c'è davvero un buon modo di analizzare un solo liner senza delimitatore del tipo "schema di terminazione".

W3C Discussione
Tu non sei la prima persona con questa domanda. C'è was a discussion sulla mailing list del W3C. Il poster ha dichiarato:

non era in discussione la necessità di fornire molteplici sfide in una singola risposta . Stavo solo mettendo in dubbio la saggezza nel consentire le sfide multiple in un singolo campo di intestazione, data la strana combinazione di separatori che crea.

Alcuni altri thread discutere temi di attualità & azioni future che ti potrebbero interessare:

Se solo ...
Non che io abbia lo stomaco per esso, ma si potrebbe scavare attraverso la chromimum, firefox & codice WebKit per vedere come queste comunità hanno gestito la questione.

+1

Sì, sembra che WinInet non gestisca più schemi di autenticazione su un'unica intestazione. Non ne sono entusiasta, ma penso che potrei eseguire il servizio su più endpoint, uno che supporta solo Basic, e uno che supporta solo Negotiate, e fare in modo che il client provi quello che supporta solo Negotiate per primo, e se fallisce , passare a Base. – bpeikes

+0

L'utilizzo di una risorsa diversa per un diverso tipo di schema di autenticazione non mi sembra utile. Dopotutto, vuoi codificare l'intestazione in una risposta '401 Non autorizzata', se il client tenta di accedere a una risorsa specifica non autenticata. Inoltre: il concetto di endpoint mostra una mancanza di comprensione dell'architettura REST di HTTP. Sul web abbiamo piuttosto degli entry point. – aef

Problemi correlati