wake-up-neo.com

Unterschied zwischen OAuth 2.0 "state" und OpenID "nonce" Parameter? Warum state konnte nicht wiederverwendet werden?

OAuth 2.0 definiert den "Status" -Parameter, der bei einer Anforderung durch den Client gesendet werden soll, um Angriffe auf standortübergreifende Anforderungen zu verhindern. Dasselbe wird in der OpenID-Spezifikation für "nonce" erwähnt. Abgesehen von der Tatsache, dass "nonce" im ID-Token anstelle von Abfrageparametern zurückgegeben wird, scheinen sie genau demselben Zweck zu dienen. Wenn jemand erklären kann, warum sie getrennt sind

37
dvsakgec

Staat und Nonce scheinen ähnlich zu sein. Aber wenn Sie tief graben, werden Sie feststellen, dass sie unterschiedlichen Zwecken dienen.

State soll den Endbenutzer vor Cross Site Request Forgery (CSRF) -Angriffen schützen. Es wird eingeführt von OAuth 2.0 protocol RFC6749 . Protocol besagt, dass,

Sobald die Autorisierung vom Endbenutzer erhalten wurde, leitet der Autorisierungsserver den Benutzeragenten des Endbenutzers mit dem erforderlichen Bindungswert, der im Parameter "state" enthalten ist, zurück zum Client. Der Bindungswert ermöglicht es dem Client, die Gültigkeit der Anforderung zu überprüfen, indem der Bindungswert mit dem authentifizierten Status des Benutzeragenten abgeglichen wird

Und dies wird in der Autorisierungsanfrage verwendet. Dadurch kann der Client überprüfen, ob die Autorisierungsantwort vom ursprünglichen Server, der die Authentifizierung durchführt, geändert und gesendet wurde. Anfrage wurde gesendet. Kurz gesagt, der Client kann die Autorisierungsanforderung und -antwort überprüfen.

Nonce dient einem anderen Zweck. Es bindet die Token an den Client. Es dient als Token-Validierungsparameter und wird mit OpenID Connect-Spezifikation eingeführt.

nonce - String-Wert, der verwendet wird, um eine Client-Sitzung einem ID-Token zuzuordnen und Wiederholungsangriffe abzuschwächen. Der Wert wird unverändert von der Authentifizierungsanforderung an das ID-Token übergeben. Falls im ID-Token vorhanden, MÜSSEN Clients sicherstellen, dass der Nonce-Claim-Wert dem Wert des Nonce-Parameters entspricht, der in der Authentifizierungsanforderung gesendet wurde. Wenn in der Authentifizierungsanforderung vorhanden, MÜSSEN die Autorisierungsserver einen Anspruch auf Nichteinhaltung in das ID-Token aufnehmen, wobei der Anspruchswert der Wert auf Nichteinhaltung ist, der in der Authentifizierungsanforderung gesendet wird. Autorisierungsserver SOLLTEN keine andere Verarbeitung für verwendete Nonce-Werte ausführen. Der Wert nonce unterscheidet zwischen Groß- und Kleinschreibung

Wie Sie sehen, stammt der Wert nonce aus der Autorisierungsanforderung und wird vom Client generiert. Wenn nonce enthalten ist, ist es im Token enthalten. Auf diese Weise kann der Client das empfangene Token anhand der anfänglichen Autorisierungsanforderung validieren und so die Gültigkeit des Tokens sicherstellen.

Außerdem kann nonce je nach Flusstyp ein obligatorischer Parameter sein. Das implizite Flow- und Hybrid-Flow-Mandat nonce value. Beide Werte werden generiert und validiert von der Client-Anwendung.

Warum konnte der Status nicht wiederverwendet werden?

Wenn eine Autorisierungsanforderung erfasst wird, kann der Angreifer die Autorisierungsantwort vortäuschen. Dies kann durch Ändern des Zustandsparameters vermieden werden.

41