WWW-Authenticate header
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Der HTTP WWW-Authenticate
Antwort-Header gibt die HTTP Authentifizierungsmethoden (oder Herausforderungen) an, die verwendet werden können, um auf eine bestimmte Ressource zuzugreifen.
Dieser Header ist Teil des allgemeinen HTTP Authentifizierungsframeworks, das mit einer Reihe von Authentifizierungsschemata genutzt werden kann. Jede Herausforderung identifiziert ein vom Server unterstütztes Schema und zusätzliche Parameter, die für diesen Schematyp definiert sind.
Ein Server, der HTTP-Authentifizierung verwendet, antwortet mit einer 401 Unauthorized
Antwort auf eine Anfrage nach einer geschützten Ressource. Diese Antwort muss mindestens einen WWW-Authenticate
Header und mindestens eine Herausforderung enthalten, um anzuzeigen, welche Authentifizierungsschemata zur Verfügung stehen, um die Ressource zuzugreifen, und welche zusätzlichen Daten jedes spezifische Schema benötigt.
Mehrere Herausforderungen sind in einem WWW-Authenticate
Header erlaubt, und mehrere WWW-Authenticate
Header sind in einer Antwort erlaubt. Ein Server kann den WWW-Authenticate
Header auch in anderen Antwortnachrichten einschließen, um anzuzeigen, dass die Bereitstellung von Anmeldedaten die Antwort beeinflussen könnte.
Nachdem der WWW-Authenticate
Header empfangen wurde, wird ein Client typischerweise den Benutzer zur Eingabe von Anmeldedaten auffordern und dann die Ressource erneut anfordern. Diese neue Anfrage verwendet den Authorization
Header, um die Anmeldedaten an den Server zu übermitteln, die für die ausgewählte Authentifizierungsmethode entsprechend codiert sind. Der Client sollte die sicherste der Herausforderungen wählen, die er versteht (beachten Sie, dass in einigen Fällen die "sicherste" Methode umstritten ist).
Header-Typ | Antwort-Header |
---|---|
Verbotener Anfrageheader | Nein |
Syntax
WWW-Authenticate: <challenge>
Wobei ein <challenge>
aus einem <auth-scheme>
besteht, gefolgt von einem optionalen <token68>
oder einer durch Kommas getrennten Liste von <auth-params>
:
challenge = <auth-scheme> <auth-param>, …, <auth-paramN> challenge = <auth-scheme> <token68>
Zum Beispiel:
WWW-Authenticate: <auth-scheme>
WWW-Authenticate: <auth-scheme> token68
WWW-Authenticate: <auth-scheme> auth-param1=param-token1
WWW-Authenticate: <auth-scheme> auth-param1=param-token1, …, auth-paramN=param-tokenN
Das Vorhandensein eines token68
oder von Authentifizierungsparametern hängt vom ausgewählten <auth-scheme>
ab. Zum Beispiel erfordert die Basic-Authentifizierung ein <realm>
und erlaubt die optionale Verwendung des charset
Schlüssels, unterstützt aber kein token68
:
WWW-Authenticate: Basic realm="Dev", charset="UTF-8"
Mehrere Herausforderungen können in einer durch Kommata getrennten Liste gesendet werden
WWW-Authenticate: <challenge>, …, <challengeN>
Mehrere Header können auch in einer einzigen Antwort gesendet werden:
WWW-Authenticate: <challenge>
WWW-Authenticate: <challengeN>
Direktiven
<auth-scheme>
-
Ein nicht casesensitives Token, das das verwendete Authentifizierungsschema angibt. Einige der gängigeren Typen sind
Basic
,Digest
,Negotiate
undAWS4-HMAC-SHA256
. IANA führt eine Liste von Authentifizierungsschemata, aber es gibt auch andere Schemata, die von Host-Diensten angeboten werden. <auth-param>
Optional-
Ein Authentifizierungsparameter, dessen Format vom
<auth-scheme>
abhängt.<realm>
wird unten beschrieben, da es ein gängiger Authentifizierungsparameter bei vielen Authentifizierungsschemata ist.<realm>
Optional-
Der String
realm
gefolgt von=
und einem umschlossenen String, der einen geschützten Bereich beschreibt, z.B.realm="Testumgebung"
. Ein Realm ermöglicht es einem Server, die Bereiche zu unterteilen, die er schützt (falls unterstützt durch ein Schema, das eine solche Unterteilung erlaubt). Manche Clients zeigen diesen Wert dem Benutzer an, um ihn darüber zu informieren, welche speziellen Anmeldedaten erforderlich sind – obwohl die meisten Browser dies aus Phishing-Schutzgründen nicht mehr tun. Der einzige verlässlich unterstützte Zeichensatz für diesen Wert istus-ascii
. Wenn kein Realm angegeben ist, zeigen Clients oft einen formatierten Hostnamen an.
<token68>
Optional-
Ein Token, das für einige Schemas nützlich sein kann. Das Token erlaubt die 66 unreservierten URI-Zeichen plus einige andere. Es kann eine base64, base64url, base32 oder base16 (hex) Codierung enthalten, mit oder ohne Padding, jedoch ohne Leerzeichen. Die Alternative token68 zu Authentifizierungsparameterlisten wird für die Konsistenz mit älteren Authentifizierungsschemata unterstützt.
Im Allgemeinen müssen Sie die relevanten Spezifikationen für die Authentifizierungsparameter prüfen, die für jedes <auth-scheme>
benötigt werden. Die folgenden Abschnitte beschreiben Token- und Authentifizierungsparameter für einige gängige Authentifizierungsschemata.
Basic-Authentifizierungsrichtlinien
<realm>
-
Ein
<realm>
wie oben beschrieben. Beachten Sie, dass der Realm für dieBasic
-Authentifizierung obligatorisch ist. charset="UTF-8"
Optional-
Teilt dem Client das bevorzugte Kodierschema des Servers beim Einreichen eines Benutzernamens und Passworts mit. Der einzige erlaubte Wert ist der nicht-case-sensitive String
UTF-8
. Dies bezieht sich nicht auf die Kodierung des Realm-Strings.
Digest-Authentifizierungsrichtlinien
<realm>
Optional-
Ein
<realm>
wie oben beschrieben, welcher den zu verwendenden Benutzernamen/das Passwort angibt. Sollte mindestens den Hostnamen enthalten, könnte aber die Benutzer oder Gruppen angeben, die Zugriff haben. domain
Optional-
Eine durch Leerzeichen getrennte Liste von URI-Präfixen, die alle Orte definieren, an denen die Authentifizierungsinformationen verwendet werden können. Wenn dieser Schlüssel nicht angegeben ist, können die Authentifizierungsinformationen überall im Webroot verwendet werden.
nonce
-
Ein vom Server spezifizierter String, den der Server verwenden kann, um die Lebensdauer zu kontrollieren, in der bestimmte Anmeldedaten als gültig betrachtet werden. Dieser muss jedes Mal, wenn eine 401-Antwort erfolgt, einzigartig generiert werden und kann öfter regeneriert werden (z.B. eine Digest nur einmal zulassen). Die Spezifikation enthält Hinweise auf mögliche Algorithmen zur Erstellung dieses Wertes. Der Nonce-Wert ist für den Client undurchsichtig.
opaque
-
Ein vom Server angegebener String, der unverändert in der
Authorization
zurückgegeben werden sollte. Dies ist für den Client ebenfalls undurchsichtig. Der Server wird empfohlen, Base64 oder hexadezimale Daten einzuschließen. stale
Optional-
Eine nicht casesensitive Kennzeichnung, die anzeigt, dass die vorherige Anfrage vom Client abgelehnt wurde, weil der verwendete
nonce
zu alt (veraltet) ist. Wenn diestrue
ist, kann die Anfrage mit demselben Benutzernamen/Passwort erneut verschlüsselt mit dem neuennonce
gesendet werden. Wenn es einen anderen Wert hat, sind der Benutzername/das Passwort ungültig und müssen vom Benutzer erneut angefordert werden. algorithm
Optional-
Ein String, der den Algorithmus angibt, der zur Erstellung eines Digest verwendet wird. Gültige Non-Session-Werte sind:
MD5
(Standard, wennalgorithm
nicht angegeben),SHA-256
,SHA-512
. Gültige Session-Werte sind:MD5-sess
,SHA-256-sess
,SHA-512-sess
. qop
-
Ein String, der die Qualität der vom Server unterstützten Schutzmaßnahmen angibt. Dies muss angegeben werden, unbekannte Optionen müssen ignoriert werden.
"auth"
: Authentifizierung"auth-int"
: Authentifizierung mit Integritätsschutz
charset="UTF-8"
Optional-
Teilt dem Client das bevorzugte Kodierschema des Servers mit beim Einreichen eines Benutzernamens und Passworts. Der einzige erlaubte Wert ist der nicht-case-sensitive String "UTF-8".
userhash
Optional-
Ein Server kann
"true"
angeben, um zu zeigen, dass er die Hashbildung von Benutzernamen unterstützt (Standard ist"false"
)
HTTP Origin-Bound Authentication (HOBA)
<challenge>
-
Ein Satz von Paaren im Format
<len>:<value>
, die zusammengefügt werden, um dem Client gegeben zu werden. Die Herausforderung besteht aus einem Nonce, einem Algorithmus, einem Ursprung, einem Realm, einem Schlüsselkennzeichen und der Herausforderung. <max-age>
-
Die Anzahl der Sekunden ab dem Zeitpunkt, zu dem die HTTP-Anwort gesendet wird, für die Antworten auf diese Herausforderung akzeptiert werden können.
<realm>
Optional-
Wie oben im Abschnitt Direktiven beschrieben.
Beispiele
Ausgabe mehrerer Authentifizierungschallenges
Mehrere Herausforderungen können in einem einzigen Antwortheader angegeben werden:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: challenge1, …, challengeN
Mehrere Herausforderungen können in separaten WWW-Authenticate
Headers in derselben Antwort gesendet werden:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: challenge1
WWW-Authenticate: challengeN
Basic Authentifizierung
Ein Server, der nur Basic-Authentifizierung unterstützt, könnte einen WWW-Authenticate
Antwort-Header haben, der folgendermaßen aussieht:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Staging server", charset="UTF-8"
Ein Benutzeragent, der diesen Header empfängt, würde zuerst den Benutzer nach seinem Benutzernamen und Passwort fragen und dann die Ressource erneut anfordern mit den kodierten Anmeldedaten im Authorization
Header. Der Authorization
Header könnte so aussehen:
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Für Basic
Authentifizierung werden die Anmeldedaten erstellt, indem zuerst der Benutzername und das Passwort mit einem Doppelpunkt kombiniert werden (aladdin:opensesame
), und dann der resultierende String in `base64` kodiert wird (YWxhZGRpbjpvcGVuc2VzYW1l
).
Hinweis: Siehe auch HTTP-Authentifizierung für Beispiele zur Konfiguration von Apache oder Nginx-Servern zum Passwortschutz Ihrer Website mit HTTP-Basicauthentifizierung.
Digest-Authentifizierung mit SHA-256 und MD5
Hinweis:
Dieses Beispiel stammt aus RFC 7616 "HTTP Digest Access Authentication" (andere Beispiele in der Spezifikation zeigen die Verwendung von SHA-512
, charset
und userhash
).
Der Client versucht, auf ein Dokument bei der URI http://www.example.org/dir/index.html
zuzugreifen, das über Digest-Authentifizierung geschützt ist. Der Benutzername für dieses Dokument ist "Mufasa" und das Passwort lautet "Circle of Life" (beachten Sie den einzelnen Leerraum zwischen jedem der Wörter).
Beim ersten Mal, wenn der Client das Dokument anfordert, wird kein Authorization
Header-Feld gesendet. Hier antwortet der Server mit einer HTTP 401-Nachricht, die eine Herausforderung für jeden von ihm unterstützten Digest-Algorithmus beinhaltet, in der Reihenfolge seiner Präferenz (SHA256
und dann MD5
)
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="http-auth@example.org",
qop="auth, auth-int",
algorithm=SHA-256,
nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"
WWW-Authenticate: Digest
realm="http-auth@example.org",
qop="auth, auth-int",
algorithm=MD5,
nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"
Der Client fordert den Benutzer zur Eingabe seines Benutzernamens und Passworts auf und antwortet dann mit einer neuen Anfrage, die die Anmeldedaten im Authorization
Header-Feld codiert. Wenn der Client den MD5-Digest gewählt hat, könnte das Authorization
Header-Feld wie unten gezeigt aussehen:
Authorization: Digest username="Mufasa",
realm="http-auth@example.org",
uri="/dir/index.html",
algorithm=MD5,
nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
nc=00000001,
cnonce="f2/wE4q74E6zIJEtWaHKaf5wv/H5QzzpXusqGemxURZJ",
qop=auth,
response="8ca523f5e9506fed4657c9700eebdbec",
opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"
Wenn der Client den SHA-256-Digest gewählt hat, könnte das Authorization
Header-Feld wie unten gezeigt aussehen:
Authorization: Digest username="Mufasa",
realm="http-auth@example.org",
uri="/dir/index.html",
algorithm=SHA-256,
nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
nc=00000001,
cnonce="f2/wE4q74E6zIJEtWaHKaf5wv/H5QzzpXusqGemxURZJ",
qop=auth,
response="753927fa0e85d155564e2e272a28d1802ca10daf449
6794697cf8db5856cb6c1",
opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"
HOBA-Authentifizierung
Ein Server, der HOBA-Authentifizierung unterstützt, könnte einen WWW-Authenticate
Antwort-Header haben, der folgendermaßen aussieht:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: HOBA max-age="180", challenge="16:MTEyMzEyMzEyMw==1:028:https://www.example.com:8080:3:MTI48:NjgxNDdjOTctNDYxYi00MzEwLWJlOWItNGM3MDcyMzdhYjUz"
Der zu signierende Blob-Challenge besteht aus diesen Teilen: www.example.com
mit Port 8080, der Nonce ist 1123123123
, der Algorithmus zum Signieren ist RSA-SHA256, das Schlüsselkennzeichen ist 123
, und schließlich die Herausforderung ist 68147c97-461b-4310-be9b-4c707237ab53
.
Ein Client würde diesen Header empfangen, die Herausforderung extrahieren, sie mit seinem privaten Schlüssel, der dem Schlüsselkennzeichen 123 in unserem Beispiel entspricht, unter Verwendung von RSA-SHA256 signieren und dann das Ergebnis im Authorization
Header als durch Punkte getrennte Schlüssel-ID, Herausforderung, Nonce und Signatur senden.
Authorization: 123.16:MTEyMzEyMzEyMw==1:028:https://www.example.com:8080:3:MTI48:NjgxNDdjOTctNDYxYi00MzEwLWJlOWItNGM3MDcyMzdhYjUz.1123123123.<signature-of-challenge>
Spezifikationen
Specification |
---|
HTTP Semantics # field.www-authenticate |