Optimierte Verknüpfung mit OAuth und Google Log-in

Übersicht

OAuth-basierte optimierte Google Log-in-Verknüpfung fügt Google Log-in zusätzlich zu OAuth-Verknüpfungen hinzu. Dies ermöglicht Google-Nutzern eine nahtlose Verknüpfung und ermöglicht außerdem die Kontoerstellung, sodass der Nutzer über sein Google-Konto ein neues Konto in Ihrem Dienst erstellen kann.

Führe die folgenden allgemeinen Schritte aus, um eine Kontoverknüpfung mit OAuth und Google Log-in durchzuführen:

  1. Bitten Sie den Nutzer zuerst um seine Einwilligung für den Zugriff auf sein Google-Profil.
  2. Prüfen Sie anhand der Angaben im Profil, ob das Nutzerkonto vorhanden ist.
  3. Verknüpfen Sie bestehende Konten.
  4. Wenn Sie in Ihrem Authentifizierungssystem keine Übereinstimmung für den Google-Nutzer finden, prüfen Sie das von Google erhaltene ID-Token. Sie können dann anhand der im ID-Token enthaltenen Profilinformationen einen Nutzer erstellen.
Diese Abbildung zeigt die Schritte, mit denen ein Nutzer sein Google-Konto mithilfe des optimierten Verknüpfungsvorgangs verknüpfen kann. Der erste Screenshot zeigt, wie ein Nutzer Ihre App für die Verknüpfung auswählen kann. Auf dem zweiten Screenshot kann der Nutzer bestätigen, ob er schon ein Konto bei Ihrem Dienst hat. Auf dem dritten Screenshot kann der Nutzer das Google-Konto auswählen, das er verknüpfen möchte. Der vierte Screenshot zeigt die Bestätigung der Verknüpfung des Google-Kontos mit der App. Der fünfte Screenshot zeigt ein erfolgreich verknüpftes Nutzerkonto in der Google App.

Abbildung 1. Kontoverknüpfung auf dem Smartphone eines Nutzers mit optimierter Verknüpfung

Voraussetzungen für eine optimierte Verknüpfung

OAuth-Server implementieren

Der Endpunkt Tokenaustausch muss die Intents check, create und get unterstützen. Im Folgenden sehen Sie die Schritte, die während der Kontoverknüpfung ausgeführt wurden. Außerdem wird angegeben, wann die verschiedenen Intents aufgerufen werden:

  1. Hat der Nutzer ein Konto in Ihrem Authentifizierungssystem? (Nutzer entscheidet mit „Ja“ oder „Nein“).
    1. JA : Verwendet der Nutzer die mit seinem Google-Konto verknüpfte E-Mail-Adresse, um sich auf deiner Plattform anzumelden? (Nutzer entscheidet mit „Ja“ oder „Nein“).
      1. JA : Hat der Nutzer ein übereinstimmendes Konto in Ihrem Authentifizierungssystem? (check intent wird zur Bestätigung aufgerufen)
        1. JA: get intent wird aufgerufen und das Konto wird verknüpft, wenn Intent abgerufen werden kann.
        2. NEIN : Neues Konto erstellen? (Nutzer entscheidet mit „Ja“ oder „Nein“).
          1. JA : create intent wird aufgerufen und das Konto wird verknüpft, wenn die Intent-Erstellung erfolgreich zurückgegeben wurde.
          2. NEIN : Der OAuth-Ablauf im Web wird ausgelöst, der Nutzer wird zu seinem Browser weitergeleitet und der Nutzer kann eine Verknüpfung mit einer anderen E-Mail-Adresse herstellen.
      2. NEIN : Der Web-OAuth-Ablauf wird ausgelöst, der Nutzer wird zu seinem Browser weitergeleitet und der Nutzer kann eine andere E-Mail-Adresse verwenden.
    2. NEIN : Hat der Nutzer ein übereinstimmendes Konto in Ihrem Authentifizierungssystem? (check intent wird zur Bestätigung aufgerufen)
      1. JA : get intent wird aufgerufen und das Konto wird verknüpft, wenn Intent abgerufen werden kann.
      2. NEIN : create intent wird aufgerufen und das Konto wird verknüpft, wenn die Intent-Erstellung erfolgreich zurückgegeben wurde.

Nach vorhandenem Nutzerkonto suchen (Intent überprüfen)

Wenn der Nutzer in die Verwendung seines Google-Profils einwilligt, sendet Google eine Anfrage mit einer signierten Assertion zur Identität des Google-Nutzers. Die Assertion enthält Informationen, die die Google-Konto-ID, den Namen und die E-Mail-Adresse des Nutzers enthalten. Der für Ihr Projekt konfigurierte Token Exchange-Endpunkt verarbeitet diese Anfrage.

Wenn das entsprechende Google-Konto bereits in Ihrem Authentifizierungssystem vorhanden ist, antwortet Ihr Token-Exchange-Endpunkt mit account_found=true. Wenn das Google-Konto mit einem vorhandenen Nutzer übereinstimmt, gibt der Tokenaustausch-Endpunkt den HTTP-Fehler 404 (nicht gefunden) mit account_found=false zurück.

Die Anfrage hat folgendes Format:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=check&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

Der Token-Exchange-Endpunkt muss die folgenden Parameter verarbeiten können:

Parameter-Endpunktparameter
intent Bei diesen Anfragen hat der Parameter den Wert check.
grant_type Der Typ des ausgetauschten Tokens. Für diese Anfragen hat dieser Parameter den Wert urn:ietf:params:oauth:grant-type:jwt-bearer.
assertion Ein JSON Web Token (JWT), das eine signierte Assertion der Identität des Google-Nutzers bereitstellt. Das JWT enthält Informationen, die die Google-Konto-ID, den Namen und die E-Mail-Adresse des Nutzers enthalten.
client_id Die Client-ID, die Sie Google zugewiesen haben.
client_secret Der Clientschlüssel, den Sie Google zugewiesen haben.

Damit Sie auf die check-Intent-Anfragen antworten können, muss Ihr Token Exchange-Endpunkt die folgenden Schritte ausführen:

  • JWT-Assertion validieren und decodieren
  • Prüfen Sie, ob das Google-Konto bereits in Ihrem Authentifizierungssystem vorhanden ist.
Überprüfen und dekodieren Sie die JWT-Zusicherung

Sie können die JWT-Zusicherung validieren und decodieren, indem Sie eine JWT-Decodierungsbibliothek für Ihre Sprache verwenden . Verwenden Sie die öffentlichen Schlüssel von Google, die in den Formaten JWK oder PEM verfügbar sind, um die Signatur des Tokens zu überprüfen.

Beim Dekodieren sieht die JWT-Zusicherung wie folgt aus:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

Stellen Sie neben der Überprüfung der Signatur des Tokens sicher, dass der Aussteller der Assertion (Feld iss ) https://accounts.google.com , dass die Zielgruppe (Feld aud ) Ihre zugewiesene Client-ID ist und das Token nicht abgelaufen ist ( exp Feld).

Anhand der Felder email , email_verified und hd können Sie feststellen, ob Google eine E-Mail-Adresse hostet und für diese maßgeblich ist. In Fällen, in denen Google autorisierend ist, ist der Nutzer derzeit als legitimer Kontoinhaber bekannt, und Sie können das Passwort oder andere Herausforderungsmethoden überspringen. Andernfalls können diese Methoden verwendet werden, um das Konto vor dem Verknüpfen zu überprüfen.

Fälle, in denen Google maßgeblich ist:

  • email hat @gmail.com Suffix @gmail.com . Dies ist ein Google Mail-Konto.
  • email_verified ist true und hd ist festgelegt. Dies ist ein G Suite-Konto.

Benutzer können sich für Google-Konten registrieren, ohne Google Mail oder G Suite zu verwenden. Wenn email kein @gmail.com Suffix enthalten und hd fehlt, ist Google nicht autorisierend. Zur Überprüfung des Benutzers werden Kennwörter oder andere @gmail.com empfohlen. email_verfied kann auch wahr sein, da Google den Nutzer bei der email_verfied des Google-Kontos zunächst überprüft hat. Der Besitz des E-Mail-Kontos eines Drittanbieters hat sich jedoch möglicherweise seitdem geändert.

Prüfen, ob das Google-Konto bereits in Ihrem Authentifizierungssystem vorhanden ist

Prüfen Sie, ob eine der folgenden Bedingungen erfüllt ist:

  • Die Google-Konto-ID, die im Feld „Assertions“ sub aufgeführt ist, befindet sich in deiner Nutzerdatenbank.
  • Die E-Mail-Adresse in der Assertion stimmt mit einem Nutzer in Ihrer Nutzerdatenbank überein.

Wenn eine der Bedingungen erfüllt ist, hat sich der Nutzer bereits registriert. In diesem Fall erhältst du eine Antwort wie die folgende:

HTTP/1.1 200 Success
Content-Type: application/json;charset=UTF-8

{
  "account_found":"true",
}

Wenn weder die Google-Konto-ID noch die in der Änderung angegebene E-Mail-Adresse mit einem Nutzer in Ihrer Datenbank übereinstimmt, hat sich der Nutzer noch nicht registriert. In diesem Fall muss der Tokenaustausch-Endpunkt mit einem HTTP 404-Fehler antworten, der "account_found": "false" angibt, wie im folgenden Beispiel gezeigt:

HTTP/1.1 404 Not found
Content-Type: application/json;charset=UTF-8

{
  "account_found":"false",
}

Automatische Verknüpfung verarbeiten (Intent)

Wenn der Nutzer in die Verwendung seines Google-Profils einwilligt, sendet Google eine Anfrage mit einer signierten Assertion zur Identität des Google-Nutzers. Die Assertion enthält Informationen, die die Google-Konto-ID, den Namen und die E-Mail-Adresse des Nutzers enthalten. Der für Ihr Projekt konfigurierte Token Exchange-Endpunkt verarbeitet diese Anfrage.

Wenn das entsprechende Google-Konto bereits in Ihrem Authentifizierungssystem vorhanden ist, gibt Ihr Token-Austausch-Endpunkt ein Token für den Nutzer zurück. Wenn das Google-Konto mit einem vorhandenen Nutzer übereinstimmt, gibt der Tokenaustausch-Endpunkt den Fehler linking_error und optional login_hint zurück.

Die Anfrage hat folgendes Format:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

Der Token-Exchange-Endpunkt muss die folgenden Parameter verarbeiten können:

Parameter-Endpunktparameter
intent Bei diesen Anfragen hat der Parameter den Wert get.
grant_type Der Typ des ausgetauschten Tokens. Für diese Anfragen hat dieser Parameter den Wert urn:ietf:params:oauth:grant-type:jwt-bearer.
assertion Ein JSON Web Token (JWT), das eine signierte Assertion der Identität des Google-Nutzers bereitstellt. Das JWT enthält Informationen, die die Google-Konto-ID, den Namen und die E-Mail-Adresse des Nutzers enthalten.
scope Optional:Alle Bereiche, für die Sie Google so konfiguriert haben, dass sie von Nutzern angefordert werden.
client_id Die Client-ID, die Sie Google zugewiesen haben.
client_secret Der Clientschlüssel, den Sie Google zugewiesen haben.

Damit Sie auf die get-Intent-Anfragen antworten können, muss Ihr Token Exchange-Endpunkt die folgenden Schritte ausführen:

  • JWT-Assertion validieren und decodieren
  • Prüfen Sie, ob das Google-Konto bereits in Ihrem Authentifizierungssystem vorhanden ist.
Überprüfen und dekodieren Sie die JWT-Zusicherung

Sie können die JWT-Zusicherung validieren und decodieren, indem Sie eine JWT-Decodierungsbibliothek für Ihre Sprache verwenden . Verwenden Sie die öffentlichen Schlüssel von Google, die in den Formaten JWK oder PEM verfügbar sind, um die Signatur des Tokens zu überprüfen.

Beim Dekodieren sieht die JWT-Zusicherung wie folgt aus:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

Stellen Sie neben der Überprüfung der Signatur des Tokens sicher, dass der Aussteller der Assertion (Feld iss ) https://accounts.google.com , dass die Zielgruppe (Feld aud ) Ihre zugewiesene Client-ID ist und das Token nicht abgelaufen ist ( exp Feld).

Anhand der Felder email , email_verified und hd können Sie feststellen, ob Google eine E-Mail-Adresse hostet und für diese maßgeblich ist. In Fällen, in denen Google autorisierend ist, ist der Nutzer derzeit als legitimer Kontoinhaber bekannt, und Sie können das Passwort oder andere Herausforderungsmethoden überspringen. Andernfalls können diese Methoden verwendet werden, um das Konto vor dem Verknüpfen zu überprüfen.

Fälle, in denen Google maßgeblich ist:

  • email hat @gmail.com Suffix @gmail.com . Dies ist ein Google Mail-Konto.
  • email_verified ist true und hd ist festgelegt. Dies ist ein G Suite-Konto.

Benutzer können sich für Google-Konten registrieren, ohne Google Mail oder G Suite zu verwenden. Wenn email kein @gmail.com Suffix enthalten und hd fehlt, ist Google nicht autorisierend. Zur Überprüfung des Benutzers werden Kennwörter oder andere @gmail.com empfohlen. email_verfied kann auch wahr sein, da Google den Nutzer bei der email_verfied des Google-Kontos zunächst überprüft hat. Der Besitz des E-Mail-Kontos eines Drittanbieters hat sich jedoch möglicherweise seitdem geändert.

Prüfen, ob das Google-Konto bereits in Ihrem Authentifizierungssystem vorhanden ist

Prüfen Sie, ob eine der folgenden Bedingungen erfüllt ist:

  • Die Google-Konto-ID, die im Feld „Assertions“ sub aufgeführt ist, befindet sich in deiner Nutzerdatenbank.
  • Die E-Mail-Adresse in der Assertion stimmt mit einem Nutzer in Ihrer Nutzerdatenbank überein.

Wenn ein Konto für den Nutzer gefunden wird, ermittle ein Zugriffstoken und gib die Werte in einem JSON-Objekt im Text deiner HTTPS-Antwort zurück, wie im folgenden Beispiel gezeigt:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",

  "refresh_token": "REFRESH_TOKEN",

  "expires_in": SECONDS_TO_EXPIRATION
}

In einigen Fällen schlägt die Kontoverknüpfung auf Basis des ID-Tokens möglicherweise für den Nutzer fehl. In diesem Fall muss der Token-Exchange-Endpunkt mit einem HTTP-401-Fehler antworten, in dem error=linking_error angegeben ist, wie im folgenden Beispiel gezeigt:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

Wenn Google eine 401-Fehlerantwort mit linking_error erhält, sendet Google den Nutzer an deinen Autorisierungsendpunkt mit dem Parameter login_hint als Parameter. Der Nutzer schließt die Kontoverknüpfung im Browser mit OAuth ab.

Handle account creation via Google Sign-In (create intent)

When a user needs to create an account on your service, Google makes a request to your token exchange endpoint that specifies intent=create.

The request has the following form:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&assertion=JWT&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

Your token exchange endpoint must able to handle the following parameters:

Token endpoint parameters
intent For these requests, the value of this parameter is create.
grant_type The type of token being exchanged. For these requests, this parameter has the value urn:ietf:params:oauth:grant-type:jwt-bearer.
assertion A JSON Web Token (JWT) that provides a signed assertion of the Google user's identity. The JWT contains information that includes the user's Google Account ID, name, and email address.
client_id The client ID you assigned to Google.
client_secret The client secret you assigned to Google.

The JWT within the assertion parameter contains the user's Google Account ID, name, and email address, which you can use to create a new account on your service.

To respond to the create intent requests, your token exchange endpoint must perform the following steps:

  • Validate and decode the JWT assertion.
  • Validate user information and create new account.
Überprüfen und dekodieren Sie die JWT-Zusicherung

Sie können die JWT-Zusicherung validieren und decodieren, indem Sie eine JWT-Decodierungsbibliothek für Ihre Sprache verwenden . Verwenden Sie die öffentlichen Schlüssel von Google, die in den Formaten JWK oder PEM verfügbar sind, um die Signatur des Tokens zu überprüfen.

Beim Dekodieren sieht die JWT-Zusicherung wie folgt aus:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

Stellen Sie neben der Überprüfung der Signatur des Tokens sicher, dass der Aussteller der Assertion (Feld iss ) https://accounts.google.com , dass die Zielgruppe (Feld aud ) Ihre zugewiesene Client-ID ist und das Token nicht abgelaufen ist ( exp Feld).

Anhand der Felder email , email_verified und hd können Sie feststellen, ob Google eine E-Mail-Adresse hostet und für diese maßgeblich ist. In Fällen, in denen Google autorisierend ist, ist der Nutzer derzeit als legitimer Kontoinhaber bekannt, und Sie können das Passwort oder andere Herausforderungsmethoden überspringen. Andernfalls können diese Methoden verwendet werden, um das Konto vor dem Verknüpfen zu überprüfen.

Fälle, in denen Google maßgeblich ist:

  • email hat @gmail.com Suffix @gmail.com . Dies ist ein Google Mail-Konto.
  • email_verified ist true und hd ist festgelegt. Dies ist ein G Suite-Konto.

Benutzer können sich für Google-Konten registrieren, ohne Google Mail oder G Suite zu verwenden. Wenn email kein @gmail.com Suffix enthalten und hd fehlt, ist Google nicht autorisierend. Zur Überprüfung des Benutzers werden Kennwörter oder andere @gmail.com empfohlen. email_verfied kann auch wahr sein, da Google den Nutzer bei der email_verfied des Google-Kontos zunächst überprüft hat. Der Besitz des E-Mail-Kontos eines Drittanbieters hat sich jedoch möglicherweise seitdem geändert.

Validate user information and create new account

Check whether either of the following conditions are true:

  • The Google Account ID, found in the assertion's sub field, is in your user database.
  • The email address in the assertion matches a user in your user database.

If either condition is true, prompt the user to link their existing account with their Google Account. To do so, respond to the request with an HTTP 401 error that specifies error=linking_error and gives the user's email address as the login_hint. The following is a sample response:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

When Google receives a 401 error response with linking_error, Google sends the user to your authorization endpoint with login_hint as a parameter. The user completes account linking using the OAuth linking flow in their browser.

If neither condition is true, create a new user account with the information provided in the JWT. New accounts don't typically have a password set. It's recommended that you add Google Sign-In to other platforms to enable users to log in with Google across the surfaces of your application. Alternatively, you can email the user a link that starts your password recovery flow to allow the user to set a password to sign in on other platforms.

When the creation is completed, issue an access token and refresh token and return the values in a JSON object in the body of your HTTPS response, like in the following example:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",

  "refresh_token": "REFRESH_TOKEN",

  "expires_in": SECONDS_TO_EXPIRATION
}

Google API-Client-ID abrufen

Sie müssen Ihre Google API-Client-ID bei der Registrierung der Kontoverknüpfung angeben.

So rufen Sie Ihre API-Client-ID über das Projekt ab, das Sie beim Ausführen der Schritte zur OAuth-Verknüpfung erstellt haben: Führen Sie dazu folgende Schritte aus:

  1. Öffnen Sie in der Google API Console die Seite Anmeldedaten.
  2. Erstellen Sie ein Google APIs-Projekt oder wählen Sie eines aus.

    Wenn Ihr Projekt keine Client-ID für den Webanwendungstyp hat, klicken Sie auf Anmeldedaten erstellen und erstellen. Geben Sie im Feld Autorisierte JavaScript-Quellen die Domain Ihrer Website an. Wenn Sie lokale Tests oder Entwicklungen ausführen, müssen Sie sowohl http://localhost als auch http://localhost:<port_number> in das Feld Autorisierte JavaScript-Quellen eingeben.

Implementierung validieren

You can validate your implementation by using the OAuth 2.0 Playground tool.

In the tool, do the following steps:

  1. Click Configuration to open the OAuth 2.0 Configuration window.
  2. In the OAuth flow field, select Client-side.
  3. In the OAuth Endpoints field, select Custom.
  4. Specify your OAuth 2.0 endpoint and the client ID you assigned to Google in the corresponding fields.
  5. In the Step 1 section, don't select any Google scopes. Instead, leave this field blank or type a scope valid for your server (or an arbitrary string if you don't use OAuth scopes). When you're done, click Authorize APIs.
  6. In the Step 2 and Step 3 sections, go through the OAuth 2.0 flow and verify that each step works as intended.

You can validate your implementation by using the Google Account Linking Demo tool.

In the tool, do the following steps:

  1. Click the Sign-in with Google button.
  2. Choose the account you'd like to link.
  3. Enter the service ID.
  4. Optionally enter one or more scopes that you will request access for.
  5. Click Start Demo.
  6. When prompted, confirm that you may consent and deny the linking request.
  7. Confirm that you are redirected to your platform.