Übersicht
Am 16. Februar 2022 haben wir Pläne angekündigt, Google OAuth-Interaktionen sicherer zu machen, indem wir sicherere OAuth Abläufe verwenden. Diese Anleitung hilft Ihnen, die erforderlichen Änderungen und Schritte zu erfolgreich vom Loopback-IP-Adressen-Ablauf zu unterstützten Alternativen zu migrieren.
Diese Maßnahme dient dem Schutz vor Phishing- und App-Imitationsangriffen bei Interaktionen mit den OAuth 2.0-Autorisierungsendpunkten von Google.
Was ist der Loopback-IP-Adressen-Ablauf?
Der Loopback-IP-Adressen-Ablauf unterstützt die Verwendung einer Loopback-IP-Adresse oderlocalhost als Hostkomponente der Weiterleitungs-URI, an die
Anmeldedaten gesendet werden, nachdem ein Nutzer eine OAuth-Zustimmungsanfrage genehmigt hat. Dieser Ablauf ist
anfällig für
Man-in-the-Middle
Angriffe, bei denen eine schädliche App, die auf einigen
Betriebssystemen auf dieselbe Loopback-Schnittstelle zugreift, die Antwort vom Autorisierungsserver an die angegebene
Weiterleitungs-URI abfangen und Zugriff auf den Autorisierungscode erhalten kann.
Der Loopback-IP-Adressen-Ablauf wird für die OAuth-Clienttypen iOS, Android, und Chrome eingestellt, wird aber weiterhin für Desktop Apps unterstützt.
Wichtige Compliance-Termine
- 14. März 2022 : Neue OAuth-Clients können den Loopback IP-Adressen-Ablauf nicht mehr verwenden.
- 1. August 2022 : Für nicht konforme OAuth-Anfragen wird möglicherweise eine Warnmeldung für Nutzer angezeigt.
- 31. August 2022 : Der Loopback-IP-Adressen-Ablauf wird blockiert für Android-, Chrome-App- und iOS-OAuth-Clients, die vor dem 14. März 2022 erstellt wurden.
- 21. Oktober 2022 : Alle vorhandenen Clients werden blockiert (einschließlich ausgenommener Clients).
Für nicht konforme Anfragen wird eine Fehlermeldung für Nutzer angezeigt. In der Meldung wird Nutzern mitgeteilt, dass die App blockiert ist, und die Support-E-Mail-Adresse angezeigt, die Sie auf dem OAuth-Zustimmungsbildschirm in der Google Cloud Console registriert haben.
- Prüfen Sie, ob Sie betroffen sind.
- Migrieren Sie zu einer unterstützten Alternative, wenn Sie betroffen sind.
Prüfen, ob Sie betroffen sind
OAuth-Client-ID-Typ überprüfen
Rufen Sie die Seite „Clients“ der Google Cloud Console auf und sehen Sie sich Ihren OAuth-Client-ID-Typ im Abschnitt „OAuth 2.0-Client-IDs“ an. Er kann einer der folgenden Typen sein: Webanwendung, Android, iOS, Universelle Windows-Plattform (UWP), Chrome-App, Fernseher und Geräte mit eingeschränkter Eingabe, Desktop-App.
Fahren Sie mit dem nächsten Schritt fort, wenn Ihr Clienttyp „Android“, „Chrome-App“ oder „iOS“ ist und Sie den Loopback-IP-Adressen-Ablauf verwenden.
Wenn Sie den Loopback-IP-Adressen-Ablauf für einen OAuth-Client vom Typ „Desktop-App“ verwenden, müssen Sie nichts im Zusammenhang mit dieser Einstellung unternehmen, da die Verwendung mit diesem OAuth-Clienttyp weiterhin unterstützt wird.
So prüfen Sie, ob Ihre App den Loopback-IP-Adressen-Ablauf verwendet
Prüfen Sie Ihren App-Code oder den ausgehenden Netzwerkaufruf (falls Ihre App eine OAuth-Bibliothek verwendet), um festzustellen, ob die Google OAuth Autorisierungsanfrage Ihrer App Loopback-Weiterleitungs-URI-Werte verwendet.
Anwendungscode prüfen
redirect_uri Parameter einen der folgenden Werte hat: redirect_uri=http://127.0.0.1:<port> z.B.
redirect_uri=http://127.0.0.1:3000
redirect_uri=http://[::1]:<port> z.B.
redirect_uri=http://[::1]:3000
redirect_uri=http://localhost:<port> z.B.
redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Ausgehenden Netzwerkaufruf prüfen
- Webanwendung - Netzwerkaktivität in Chrome prüfen
- Android - Netzwerkverkehr mit dem Netzwerk-Inspector prüfen
-
Chrome-Apps
- Rufen Sie die Seite „Chrome-Erweiterungen“ auf.
- Aktivieren Sie rechts oben auf der Seite der Erweiterung das Kästchen Entwicklermodus.
- Wählen Sie die Erweiterung aus, die Sie beobachten möchten.
- Klicken Sie auf der Seite der Erweiterung im Abschnitt Ansichten prüfen auf den Link Hintergrundseite.
- Ein Pop-up-Fenster mit den Entwicklertools wird geöffnet, in dem Sie den Netzwerkverkehr auf dem Tab Netzwerk beobachten können.
- iOS - HTTP-Traffic mit Instruments analysieren
- Desktop-Apps : Verw101}enden Sie ein Tool zur Netzwerkerfassung, das für das Betriebssystem verfügbar ist, für das die App entwickelt wurde.
redirect_uri Parameter einen der
folgenden Werte hat:
-
redirect_uri=http://127.0.0.1:<port>z.B.redirect_uri=http://127.0.0.1:3000 -
redirect_uri=http://[::1]:<port>z.B.redirect_uri=http://[::1]:3000 -
redirect_uri=http://localhost:<port>z.B.redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Zu einer unterstützten Alternative migrieren
Mobile Clients (Android / iOS)
Wenn Sie feststellen, dass Ihre App den Loopback-IP-Adressen-Ablauf mit einem Android- oder iOS OAuth-Clienttyp verwendet, sollten Sie zu den empfohlenen SDKs (Android, iOS) migrieren.
Mit dem SDK können Sie ganz einfach auf Google APIs zugreifen und alle Aufrufe an die OAuth 2.0-Autorisierungsendpunkte von Google verwalten.
Die Links zur Dokumentation unten enthalten Informationen zur Verwendung der empfohlenen SDKs für den Zugriff auf Google APIs ohne Weiterleitungs-URI für Loopback-IP-Adressen.
Auf Google APIs unter Android zugreifen
Clientseitiger Zugriff
ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { // Access already granted, continue with user action saveToDriveAppFolder(authorizationResult); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
Übergeben Sie authorizationResult an Ihre definierte Methode, um Inhalte im
Drive-Ordner des Nutzers zu speichern. Das authorizationResult hat die
getAccessToken() Methode, die das Zugriffstoken zurückgibt.
Serverseitiger (Offline-)Zugriff
Das folgende Beispiel zeigt, wie Sie unter Android serverseitig auf Google APIs zugreifen.ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder() .requestOfflineAccess(webClientId) .setRequestedScopes(requestedScopes) .build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { String authCode = authorizationResult.getServerAuthCode(); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
Das authorizationResult hat die
getServerAuthCode() Methode, die den Autorisierungscode zurückgibt. Sie können ihn an
Ihr Back-End senden, um ein Zugriffs- und Aktualisierungstoken zu erhalten.
In einer iOS-App auf Google APIs zugreifen
Clientseitiger Zugriff
Das folgende Beispiel zeigt, wie Sie unter iOS clientseitig auf Google APIs zugreifen .
user.authentication.do { authentication, error in guard error == nil else { return } guard let authentication = authentication else { return } // Get the access token to attach it to a REST or gRPC request. let accessToken = authentication.accessToken // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for // use with GTMAppAuth and the Google APIs client library. let authorizer = authentication.fetcherAuthorizer() }
Verwenden Sie das Zugriffstoken, um die API aufzurufen. Dazu können Sie das Zugriffstoken entweder in
den Header einer REST- oder gRPC-Anfrage einfügen (Authorization: Bearer ACCESS_TOKEN),
oder den Fetcher-Autorisierer (GTMFetcherAuthorizationProtocol) mit der
Google APIs-Clientbibliothek für Objective-C für REST verwenden.
In der Anleitung zum clientseitigen Zugriff erfahren Sie, wie Sie clientseitig auf Google APIs zugreifen. wie Sie clientseitig auf Google APIs zugreifen.
Serverseitiger (Offline-)Zugriff
Das folgende Beispiel zeigt, wie Sie serverseitig auf Google APIs zugreifen, um einen iOS-Client zu unterstützen.GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
guard error == nil else { return }
guard let user = user else { return }
// request a one-time authorization code that your server exchanges for
// an access token and refresh token
let authCode = user.serverAuthCode
}In der Anleitung zum serverseitigen Zugriff erfahren Sie , wie Sie serverseitig auf Google APIs zugreifen.
Chrome-App-Client
Wenn Sie feststellen, dass Ihre App den Loopback-IP-Adressen-Ablauf auf dem Chrome App-Client verwendet, sollten Sie zur Verwendung der Chrome Identity API migrieren.
Das folgende Beispiel zeigt, wie Sie alle Nutzerkontakte ohne Weiterleitungs-URI für Loopback-IP-Adressen abrufen.
window.onload = function() { document.querySelector('button').addEventListener('click', function() { // retrieve access token chrome.identity.getAuthToken({interactive: true}, function(token) { // .......... // the example below shows how to use a retrieved access token with an appropriate scope // to call the Google People API contactGroups.get endpoint fetch( 'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY', init) .then((response) => response.json()) .then(function(data) { console.log(data) }); }); }); };
Weitere Informationen zum Authentifizieren von Nutzern und zum Aufrufen von Google Endpunkten mit der Chrome Identity API finden Sie in der Anleitung zur Chrome Identity API.