Domanda

Sto scrivendo una piccola applicazione che espone una semplice API HTTP REST-ish. Sono bloccato nel tentativo di decidere come segnalare un errore a causa di una mancanza di autorizzazione.

L'app non ha un'API per l'autenticazione, ma dipende invece dalla presenza di un cookie contenente un token di sessione ottenuto dal client tramite un altro servizio. L'app verifica la sessione e utilizza l'identità ottenuta attraverso il processo di verifica per eseguire l'autorizzazione specifica dell'app. Non è possibile che un client esegua l'autenticazione direttamente su questa app.

Il mio problema è che l'ovvio codice di stato HTTP per il rifiuto di richieste non autorizzate, "401 non autorizzato", è specificato in termini di "WWW-Authenticate". intestazione. Vedi rfc2616 sec 10.4.2 .

  

La risposta DEVE includere a   Campo di intestazione WWW-Authenticate (sezione   14.47) contenente una sfida applicabile alla risorsa richiesta.

Non riesco a credere che questo sia un problema non comune. È comune semplicemente sovraccaricare 401 per includere usi più generali? Che dire dei browser che aprono dialoghi di autenticazione / e (che per inciso non ho visto nei miei test, quindi forse non succede per i POST)?

In conclusione: è corretto utilizzare 401 in questo contesto o esiste una soluzione migliore?

È stato utile?

Soluzione

In genere, si invia un 401 se il client può autenticare e risolvere il problema, ma poiché non si fornisce un modo per autenticarsi nell'API, suggerirei invece di restituire un errore 403 (vietato). Ciò non richiederà l'intestazione e indicherà al client che non è in grado di accedere al servizio.

Altri suggerimenti

Restituisce qualcosa del genere:

HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top