Schreiben eines SPNEGO Authenticator für Microsoft Edge unter Android
Drittanbieter können die SPNEGO-Authentifizierung in Microsoft Edge für Android aktivieren. Um diese Authentifizierung bereitzustellen, muss ein SPNEGO-Authentifikator bereitgestellt werden. In diesem Artikel wird die Schnittstelle zwischen Edge und SPNEGO Authenticator beschrieben.
Einführung
Der SPNEGO Authenticator wird von einem Android-Dienst bereitgestellt. Der Authentifikator muss in eine App integriert werden, die vom Drittanbieter bereitgestellt wird und auf dem Gerät des Benutzers installiert ist. Die App ist für die Verwaltung aller Konten verantwortlich, die für die SPNEGO-Authentifizierung verwendet werden, und für die gesamte Kommunikation mit dem SPNEGO-Server.
Der SPNEGO Authenticator ist ein Android AccountAuthenticator. Daher muss es dem unter AbstractAccountAuthenticator beschriebenen Muster folgen. Sie muss eine von AbstractAccountAuthenticator
abgeleitete Authentifikatorklasse implementieren.
Der SPNEGO Authenticator muss einen neuen Kontotyp definieren. Der Kontotypname sollte vom Domänennamen des Writers abgeleitet werden (z. B. com.example.spnego). Der Kontotyp muss für die Verwendung von customTokens definiert werden und muss das Feature "SPNEGO" (HttpNegotiateConstants.SPNEGO_FEATURE) unterstützen.
Schnittstelle zu Microsoft Edge
Edge findet den SPNEGO-Authentifikator über den bereitgestellten Android-Kontotyp. Der vom Authentifikator definierte Kontotyp wird über die Richtlinie AuthAndroidNegotiateAccountType an Edge übergeben.
Die Schnittstelle zu Edge erfolgt über das Android-Kontoverwaltungsframework, insbesondere über AbstractAccountManager.getAuthToken . Edge definiert in org.chromium.net.HttpNegotiateConstants einige weitere Schlüssel und Werte, die in den Argumenten für getAuthToken
und im zurückgegebenen Ergebnispaket verwendet werden.
getAuthToken-Argumente
Wenn getAuthToken aufgerufen wird, ist " authTokenType
SPNEGO:HOSTBASED:<spn>", wobei <spn> der Prinzipal für die Anforderung ist. Dies ist in der aktuellen Implementierung immer ein hostbasierter Prinzipal. In zukünftigen Versionen können andere Typen von Prinzipalen zugelassen werden, aber wenn sie dies tun, verwenden sie ein anderes Präfix. SPNEGO Authenticators sollten das Präfix überprüfen.
Das options
Bundle enthält die folgenden Schlüssel:
- KEY_CALLER_PID
- KEY_CALLER_UID
-
HttpNegotiateConstants.KEY_CAN_DELEGATE
– True, wenn die Delegierung zulässig ist, false, wenn nicht zulässig.
Wenn dies die zweite oder spätere Runde einer mehrrunden Authentifizierungssequenz ist, enthält sie auch die folgenden Schlüssel.
-
HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN
– Das eingehende Token aus dem WWW-Authenticate-Header, Base64-codiert. -
HttpNegotiateConstants.KEY_SPNEGO_CONTEXT
– Der SPNEGO-Kontext, der vom Authentifikator in der vorherigen Runde bereitgestellt wurde. Microsoft Edge behandelt dieses Bündel als undurchsichtiges Objekt und behält es einfach zwischen Runden bei.
getAuthToken-Ergebnispaket
Das endgültige Ergebnispaket von getAuthToken (zurückgegeben als Rückgabewert von getAuthToken
oder über AccountAuthenticatorResponse) sollte den Kontonamen, den Kontotyp und das Token enthalten, wie in der Android-Dokumentation definiert. Darüber hinaus sollte das Paket die folgenden Schlüssel enthalten:
-
HttpNegotiateConstants.KEY_SPNEGO_RESULT
– der SPNEGO-Ergebniscode. Dies sollte einer der in HttpNegotiateConstants definierten Werte sein. -
HttpNegotiateConstants.KEY_SPNEGO_CONTEXT
: Ein Kontext, der in der nächsten Authentifizierungsrunde an den Authentifikator zurückgegeben werden soll. Dies ist nur erforderlich, wenn die Authentifizierung unvollständig ist.
Implementierungsempfehlungen
Die folgenden Empfehlungen sollten beim Implementieren eines SPNEGO-Authentifikators berücksichtigt werden.
Jedes von einem SPNEGO-Kontoauthentifikator bereitgestellte Konto sollte einem einzelnen Benutzerprinzipal (Konto) entsprechen, der von einem einzelnen Schlüsselverteilungszentrum bereitgestellt wird.
Der Kontoauthentifikator sollte keine Kennwörter speichern. Stattdessen sollten TGTs für die Benutzerprinzipale gespeichert werden, und die Benutzer müssen ihre Kennwörter (oder andere Authentifizierungsdaten) erneut eingeben, wenn ihr TGT abläuft.
Der Kontoauthentifikator sollte eine Liste der autorisierten Anwendungen (oder Anwendungssignaturen) für jedes Konto führen und die Bereitstellung von Diensttoken für andere Anwendungen verweigern. Die Liste der autorisierten Anwendungen kann wie folgt sein:
- Integriert in den Kontoauthentifikator.
- Vom Systemadministrator konfigurierbar.
- Vom Benutzer konfigurierbar. In diesem Fall kann der Kontoauthentifikator dem Benutzer erlauben, neue Anwendungen dynamisch zu autorisieren, wenn er den Zugriff zum ersten Mal anzufordern.
Der Authentifikator kann die UID der aufrufenden App mithilfe des Felds KEY_CALLER_UID des Optionspakets abrufen und dann die anfordernde Anwendung mithilfe
context.getPackageManager().getNameForUid()
eines ähnlichen Aufrufs identifizieren.Dies ist erforderlich, um sicherzustellen, dass vom Benutzer ausgeführte schädliche Apps die Anmeldeinformationen des Benutzers nicht verwenden können, um auf unbeabsichtigte Weise auf Dienste zuzugreifen. Dies ist wichtig, da die Verwendung der Option "Benutzerdefinierte Token" (wie oben beschrieben) die android-eigene Signaturprüfung beim Abrufen von Authentifizierungstoken deaktiviert.
Sofern er nicht in den Kontoauthentifikator integriert ist, muss der Systemadministrator oder Benutzer in der Lage sein, den Standort des Schlüsselverteilungscenters zu konfigurieren.
In Microsoft Edge angezeigte Fehlercodes
Zusätzlich zu den Fehlercodes, die von der Authentifikator-App weitergeleitet werden können, können beim Authentifizieren einer Anforderung die folgenden Fehler angezeigt werden:
- ERR_MISSING_AUTH_CREDENTIALS: Die Kontoinformationen können nicht verwendet werden. Es kann aus einem der folgenden Gründe ausgelöst werden.
- Der Benutzer hat sich nicht bei der Authentifikator-App angemeldet, und es wurde kein berechtigtes Konto gefunden.
- Die Kontoinformationen können nicht abgerufen werden, da die aktuelle App nicht über die erforderlichen Berechtigungen verfügt.
- Es gibt mehr als ein berechtigtes Konto, und wir können keine Auswahl vom Benutzer abrufen.
- ERR_UNEXPECTED: Unerwarteter Fehler, und die Anforderung wurde beendet.
- ERR_MISCONFIGURED_AUTH_ENVIRONMENT: Die Authentifizierung kann aufgrund einiger Probleme bei der Konfiguration der App nicht abgeschlossen werden. Möglicherweise fehlen einige Berechtigungen.
Verwenden Sie Logcat , um im Systemprotokoll nach dem tag cr_net_auth zu suchen, um weitere Informationen zur Ursache dieser Fehler zu erhalten.
Verwenden des Authentifikators mit Microsoft Edge
Edge verwendet mehrere Richtlinien, um die Verwendung der SPNEGO-Authentifizierung zu steuern. Um die SPNEGO-Authentifizierung zu aktivieren, muss AuthServerAllowList konfiguriert werden, und der AuthAndroidNegotiateAccountType muss mit dem vom SPNEGO-Authentifikator bereitgestellten Kontotyp übereinstimmen.
Lizenz für Inhalte
Hinweis
Teile dieser Seite sind Änderungen, die auf von Chromium.org erstellten und freigegebenen Werken basieren und gemäß den in der Creative Commons Attribution 4.0 International License beschriebenen Begriffen verwendet werden. Die Originalseite von Chromium finden Sie hier.
Diese Arbeit unterliegt einer Creative Commons Attribution 4.0 International License.