Website-Authentifizierungsprotokolle
Authentifizierungssysteme sind das Rückgrat vieler Websites. Sie ermöglichen es den Benutzern, sich auf Ihrer Website anzumelden und die Daten zwischen den Besuchen zu bewahren. Es ist von entscheidender Bedeutung für ein stabiles Benutzererlebnis, das Ihre Benutzer für die Angabe ihrer Daten belohnt. Authentifizierungen bieten oft Zugang zu persönlichen, privaten Daten, die, wenn sie öffentlich gemacht werden, dem Benutzer schaden könnten. Um dies zu verhindern, wurden Authentifizierungsprotokolle entwickelt, um die Anfragen zu sichern und gleichzeitig den Benutzern die Möglichkeit zu geben, sich von jeder Umgebung aus sicher bei Ihrem System anzumelden.
Basic SSL Auth
Basic Auth ist die einfachste Form der Web-Authentifizierung. Sie verwendet Standard-HTTP-Header anstelle von komplizierteren Lösungen, die auf Cookies, Sitzungskennungen und Anmeldeseiten beruhen. Das grundlegende Authentifizierungssystem bietet nur sehr wenig Sicherheit. Anmeldedaten werden nur mit Base64-Kodierung übertragen und nicht verschlüsselt oder gehasht. Aufgrund der tief verwurzelten Unsicherheiten im System werden diese Anfragen meist über HTTPS gestellt.
Die Autorisierungsinformationen sollten in folgendem Format zusammengestellt und in den Header aufgenommen werden:
Format:
<!--Authorization: Basic -->
Ausführliche Informationen über das Basic Authentication-Protokoll finden Sie hier: http://www.w3.org/Protocols/HTTP/1.0/spec.html#AA
Digest Auth
Digest Auth funktioniert ähnlich wie die Basis-SSL-Authentifizierung mit der Ausnahme, dass das Passwort mit einem Einweg-Hash verschlüsselt wird. Es verwendet MD5 kryptographisches Hashing mit einem Nonce (ein vom Server generierter Wert, der Replay-Attacken verhindert).
Der typische Ablauf einer Digest-Auth-Anfrage ist:
- Ein Benutzer navigiert zu einer Seite, die eine Authentifizierung des Benutzers erfordert.
- Der Server antwortet mit einer 401-Nachricht, die besagt, dass ein Benutzer derzeit nicht zum Zugriff auf den Inhalt berechtigt ist.
- Die Website zeigt dann eine Authentifizierungsschnittstelle an, um die erforderlichen Daten (Benutzername und Kennwort) zu erfassen.
- Die bereitgestellten Daten werden mit einem Authentifizierungs-Header, der in der Anfrage enthalten ist und einen Antwortcode aufweist, an den Server zurückgesendet.
- Der Server überprüft dann die bereitgestellten Anmeldeinformationen und akzeptiert die Authentifizierung oder gibt eine 401-Meldung zurück, wenn die Anmeldeinformationen falsch sind, was dazu führen würde, dass der Benutzer erneut mit der Authentifizierungsschnittstelle aufgefordert wird.
Ausführliche Informationen über das Digest-Auth-Protokoll finden Sie hier: https://www.ietf.org/rfc/rfc2617.txt
OAuth 1.0
Das OAuth 1.0-Protokoll beruht auf einem gemeinsamen Geheimnis zwischen dem Server und der Website. Dieses gemeinsame Geheimnis wird verwendet, um eine Signatur zu erzeugen, die in die Anfrage aufgenommen wird. Die generierte Signatur wird verwendet, um serverseitig die Gültigkeit der Authentifizierungsanfrage zu überprüfen. Der Prozess zur Autorisierung des Benutzers wird im Allgemeinen in drei Schritten abgewickelt (3-stufiges OAuth):
- Site erhält Request Token.
- Benutzer autorisiert das Request Token.
- Site tauscht Request Token gegen Access Token.
Der Prozess des Abschlusses einer dreistufigen OAuth-Anfrage wird im Allgemeinen wie folgt gehandhabt:
-
Die Website sendet eine signierte Anfrage für das Request-Token. Diese Anfrage sollte die folgenden Parameter enthalten:
- oauth_consumer_key
- oauth_timestamp
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- oauth_callback
Diese Anfrage wird auf dem Server validiert und gibt bei Validierung das Anfrage-Token im folgenden Format zurück:
- oauth_token
- oauth_token_secret
- und alle anderen zusätzlichen Parameter, die von Ihrem Server zurückgegeben werden.
- Der nächste Schritt nach dem Abrufen des Anfrage-Tokens besteht darin, den Benutzer zur Eingabe seiner Anmeldedaten aufzufordern. Diese werden dann mit dem oauth_token-Anforderungstoken zu einer Signatur formatiert und mit einer Anfrage zur Validierung an den Server zurückgesendet. Nach erfolgreicher Validierung dieser Anfrage gibt der Server Folgendes zurück:
- oauth_token
- oauth_verifier
Diese werden im nächsten Schritt verwendet, um ein Zugriffstoken abzurufen.
- Der letzte Schritt besteht darin, die in Schritt 2 abgerufenen Details gegen ein Zugriffstoken auszutauschen, das für den Zugriff auf die Serverressourcen verwendet wird. Um Ihr Anfrage-Token gegen ein Zugriffs-Token auszutauschen, können Sie eine Anfrage an den Server mit der folgenden signierten Anfrage stellen
- oauth_token -zurückgegeben von Schritt 2
- oauth_consumer_key
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- oauth_verifier -zurückgegeben von Schritt 2
Dies gibt Ihnen ein Zugriffs-Token zurück, das in Verbindung mit Ihrem Geheimnis verwendet werden kann, um Anfragen nach Informationen vom Server zu stellen.
Alle Details zum OAuth 1.0 Protokoll finden Sie hier: https://tools.ietf.org/html/rfc5849
OAuth 2.0
Dieses ähnelt dem OAuth 1.0-Protokoll, es verlässt sich auf eine Client-ID und ein Geheimnis, um eine Anfrage zu formatieren, vereinfacht aber einen Großteil des komplizierten Signierungsprozesses, der dem OAuth 1.0-System eigen ist. Der Prozess zur Autorisierung eines Benutzers mit dem 3-stufigen OAuth 2.0-Protokolls läuft wie folgt ab:
-
Der Benutzer wird zur Autorisierung an den Dienst weitergeleitet, wobei die Autorisierungs-URL folgende Angaben enthält:
- client_id
- redirect_uri
- response_type
- scope
-
Der Benutzer authentifiziert sich dann bei dem Dienst und gewährt der Anwendung Zugriff auf seine Daten. Bei erfolgreicher Authentifizierung wird der Benutzer mit den folgenden Parametern zur redirect_uri zurückgeleitet:
- code
- state
-
Der in Schritt 2 zurückgegebene Code wird dann von der Anwendung verwendet, um ein Zugriffstoken anzufordern. Diese Anforderung sollte folgende Angaben enthalten:
- client_id
- client_secret
- code
- redirect_uri
- grant_type – Dieser sollte auf „authorization_code“
Der Server überprüft diese Angaben und gibt dann ein Zugangstoken mit einer Ablaufzeit zurück, wenn sie gültig sind. Diese werden in der Regel in folgendem Format zurückgegeben:
- access_token
- expires_in
- refresh_token
Ausführliche Informationen zum OAuth 2.0 Protokoll finden Sie hier: http://oauth.net/2/
Authentifizierungsprotokolle ermöglichen es Ihnen, Ihre Daten mit unterschiedlichen Sicherheitsniveaus zu schützen. Je nach den Daten, auf die zugegriffen wird, und dem von Ihnen gewünschten Sicherheitsniveau können Sie durch die Implementierung eines der oben genannten Protokolle sicher sein, dass Ihre Daten sicher sind und nur Benutzer auf sie zugreifen können, die für Ihr System zugelassen sind.