Wdrażanie protokołu OAuth za pomocą interfejsów Business Profile API

Każde żądanie wysyłane przez aplikację do interfejsów Business Profile API musi zawierać token autoryzacji. Token autoryzacji identyfikuje użytkownika aplikację do Google, co umożliwia dostęp do interfejsów Business Profile API. Aplikacja musi używać protokołu OAuth 2.0. do autoryzowania żądań.

W tym przewodniku opisujemy różne metody wdrażania OAuth 2.0 na Twojej platformie. Platforma tożsamości Google udostępnia funkcje Logowanie przez Google i OAuth, które są używane Google.

Aby lepiej zrozumieć, jak korzystać z protokołu Oauth 2.0 na potrzeby serwera WWW znajdziesz w przewodniku.

Wdrożenie protokołu OAuth 2.0 przynosi takie korzyści:

  • Chroni dostęp do danych właściciela firmy.
  • Określa tożsamość właściciela firmy, gdy loguje się na Konto Google.
  • Zapewnia, że platforma lub aplikacja partnera może uzyskiwać dostęp i wprowadzać zmiany za wyraźną zgodą właściciela firmy. Właściciel może później unieważnij te uprawnienia dostępu.
  • Określa tożsamość platformy partnera.
  • Umożliwia platformom partnerskim wykonywanie działań online lub offline w imieniu: z właścicielem firmy. Obejmuje to odpowiedzi na opinie, tworzenie postów aktualizacje pozycji menu.

Dostęp API przy użyciu protokołu OAuth 2.0

Zanim zaczniesz, musisz skonfigurować projekt Google Cloud i włączyć Business Profile API. Więcej informacji znajdziesz w dokumentacji Podstawowa konfiguracja

Aby utworzyć dane logowania i ekran zgody, wykonaj te czynności:

  1. na stronie Dane logowania; W konsoli interfejsów API kliknij Utwórz dane logowania i wybierz „Identyfikator klienta OAuth”. od listę rozwijaną.
  2. Wybierz typ wniosku, podaj odpowiednie informacje i kliknij Utwórz.
  3. Kliknij Zapisz.
  4. Zaktualizuj ustawienia ekranu akceptacji OAuth. W tym miejscu możesz zaktualizować nazwę i logo aplikacji, a także link do warunków korzystania z usługi i polityki prywatności.

Poniższy obraz przedstawia pola nazwy i logo aplikacji na OAuth ekran zgody:

Poniższy obraz przedstawia dodatkowe pola dotyczące zgody OAuth ekran:

Ten obraz pokazuje, co użytkownik może zobaczyć przed podaniem informacji zgoda:

Metody wdrażania protokołu OAuth 2.0

Możesz zastosować OAuth 2.0, korzystając z następujących metod:

Poniżej znajdziesz informacje o tym, jak stosować OAuth 2.0 do Twojej aplikacji.

Zakresy autoryzacji

Wymaga jednego z tych zakresów protokołu OAuth:

  • https://www.googleapis.com/auth/business.manage
  • https://www.googleapis.com/auth/plus.business.manage

Zakres plus.business.manage został wycofany i można go utrzymywać na zgodność wsteczną z dotychczasowymi implementacjami.

Biblioteki klienta

Przykłady w konkretnych językach na tej stronie używają bibliotek klienta interfejsów API Google aby wdrożyć autoryzację OAuth 2.0. Aby uruchomić przykładowy kod, musisz najpierw zainstaluj bibliotekę klienta dla swojego języka.

Biblioteki klienckie są dostępne w tych językach:

Logowanie przez Google

Logowanie przez Google to najszybszy sposób zintegrowania protokołu OAuth ze swoją platformą. Aplikacja jest dostępna na Androida, iOS, w przeglądarce, i inne.

Logowanie przez Google to bezpieczny system uwierzytelniania, który umożliwia użytkownikom logowanie się za pomocą swojego konta Google (tego samego konta, na które użytkownik się loguje) z innymi usługami Google. Po zalogowaniu się użytkownik może wyrazić zgodę na swoją aplikację do wywoływania interfejsów Business Profile API i wymieniania kodu autoryzacji używanego do uzyskiwania tokenów odświeżania i dostępu.

Dostęp offline

Interfejsy Business Profile API możesz wywoływać w imieniu użytkownika, nawet jeśli użytkownik jest offline. Zaleca się, aby platformy zawierały ten element funkcję, ponieważ w każdej chwili można je edytować i wyświetlać oraz zarządzać nimi użytkownik zalogował się i wyraził zgodę.

Zakładamy, że użytkownik jest już zalogowany na swoje konto Google oraz użytkownik wyraził zgodę na wywoływanie przez Twoją aplikację interfejsów Business Profile API oraz wymieniono kod autoryzacji, który jest następnie używany do uzyskania tokena odświeżania, token dostępu. Użytkownik może bezpiecznie przechowywać token odświeżania i używać go go później, aby w dowolnym momencie uzyskać nowy token dostępu. Więcej informacji: Logowanie przez Google po stronie serwera

Fragment kodu poniżej pokazuje, jak zaimplementować dostęp offline w aplikacji. Informacje o uruchamianiu tego kodu znajdziesz w sekcji Uruchamianie przykładowego kodu.

<!-- The top of file index.html -->
<html itemscope itemtype="http://schema.org/Article">
<head>
  <!-- BEGIN Pre-requisites -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js">
  </script>
  <script src="https://apis.google.com/js/client:platform.js?onload=start" async defer>
  </script>
  <!-- END Pre-requisites -->
<!-- Continuing the <head> section -->
  <script>
    function start() {
      gapi.load('auth2', function() {
        auth2 = gapi.auth2.init({
          client_id: 'YOUR_CLIENT_ID.apps.googleusercontent.com',
          // Scopes to request in addition to 'profile' and 'email'
          scope: 'https://www.googleapis.com/auth/business.manage',
          immediate: true
        });
      });
    }
  </script>
</head>
<body>
  <!-- Add where you want your sign-in button to render -->
<!-- Use an image that follows the branding guidelines in a real app, more info here:
 https://developers.google.com/identity/branding-guidelines
-->
<h1>Business Profile Offline Access Demo</h1>

<p> This demo demonstrates the use of Google Identity Services and OAuth to gain authorization to call the Business Profile APIs on behalf of the user, even when the user is offline.

When a refresh token is acquired, store this token securely on your database. You will then be able to use this token to refresh the OAuth credentials and make offline API calls on behalf of the user. 

The user may revoke access at any time from the <a href='https://myaccount.google.com/permissions'>Account Settings</a> page.
</p>

<button id="signinButton">Sign in with Google</button><br>
<input id="authorizationCode" type="text" placeholder="Authorization Code" style="width: 60%"><button id="accessTokenButton" disabled>Retrieve Access/Refresh Token</button><br>
 <input id="refreshToken" type="text" placeholder="Refresh Token, never expires unless revoked" style="width: 60%"><button id="refreshSubmit">Refresh Access Token</button><br>
 <input id="accessToken" type="text" placeholder="Access Token" style="width: 60%"><button id="gmbAccounts">Get Business Profile Accounts</button><br>
 <p>API Responses:</p>
<script>
    //Will be populated after sign in.
    var authCode;
  $('#signinButton').click(function() {
    // signInCallback
    auth2.grantOfflineAccess().then(signInCallback);
  });

  $('#accessTokenButton').click(function() {
    // signInCallback defined in step 6.
    retrieveAccessTokenAndRefreshToken(authCode);
  });

  $('#refreshSubmit').click(function() {
    // signInCallback defined in step 6.
    retrieveAccessTokenFromRefreshToken($('#refreshToken').val());
  });

   $('#gmbAccounts').click(function() {
    // signInCallback defined in step 6.
    retrieveGoogleMyBusinessAccounts($('#accessToken').val());
  });




function signInCallback(authResult) {
    //the 'code' field from the response, used to retrieve access token and bearer token
  if (authResult['code']) {
    // Hide the sign-in button now that the user is authorized, for example:
    $('#signinButton').attr('style', 'display: none');
    authCode = authResult['code'];

    $("#accessTokenButton").attr( "disabled", false );

    //Pretty print response
    var e = document.createElement("pre")
    e.innerHTML = JSON.stringify(authResult, undefined, 2);
    document.body.appendChild(e);

    //autofill authorization code input
    $('#authorizationCode').val(authResult['code'])

    
  } else {
    // There was an error.
  }
}

//WARNING: THIS FUNCTION IS DISPLAYED FOR DEMONSTRATION PURPOSES ONLY. YOUR CLIENT_SECRET SHOULD NEVER BE EXPOSED ON THE CLIENT SIDE!!!!
function retrieveAccessTokenAndRefreshToken(code) {
      $.post('https://www.googleapis.com/oauth2/v4/token',
      { //the headers passed in the request
        'code' : code,
        'client_id' : 'YOUR_CLIENT_ID.apps.googleusercontent.com',
        'client_secret' : 'YOUR_CLIENT_SECRET',
        'redirect_uri' : 'http://localhost:8000',
        'grant_type' : 'authorization_code'
      },
      function(returnedData) {
        console.log(returnedData);
        //pretty print JSON response
        var e = document.createElement("pre")
        e.innerHTML = JSON.stringify(returnedData, undefined, 2);
        document.body.appendChild(e);
        $('#refreshToken').val(returnedData['refresh_token'])
      });
}

//WARNING: THIS FUNCTION IS DISPLAYED FOR DEMONSTRATION PURPOSES ONLY. YOUR CLIENT_SECRET SHOULD NEVER BE EXPOSED ON THE CLIENT SIDE!!!!
function retrieveAccessTokenFromRefreshToken(refreshToken) {
    $.post('https://www.googleapis.com/oauth2/v4/token', 
        { // the headers passed in the request
        'refresh_token' : refreshToken,
        'client_id' : 'YOUR_CLIENT_ID.apps.googleusercontent.com',
        'client_secret' : 'YOUR_CLIENT_SECRET',
        'redirect_uri' : 'http://localhost:8000',
        'grant_type' : 'refresh_token'
      },
      function(returnedData) {
        var e = document.createElement("pre")
        e.innerHTML = JSON.stringify(returnedData, undefined, 2);
        document.body.appendChild(e);
        $('#accessToken').val(returnedData['access_token'])
      });
}

function retrieveGoogleMyBusinessAccounts(accessToken) {
    $.ajax({
        type: 'GET',
        url: 'https://mybusinessaccountmanagement.googleapis.com/v1/accounts',
        headers: {
            'Authorization' : 'Bearer ' + accessToken
        },
        success: function(returnedData) {
            var e = document.createElement("pre")
            e.innerHTML = JSON.stringify(returnedData, undefined, 2);
            document.body.appendChild(e);
        }
    });
}
</script>
</body>
</html>

Tylko dostęp online

Aby ułatwić implementację, mogą być wykonywane wywołania z interfejsów Business Profile API. bez buforowania tokenów odświeżania użytkowników. Jednak użytkownik musi być podpisany dla platformy do wykonywania wywołań interfejsu API jako użytkownik.

Ten fragment kodu przedstawia implementację Logowania przez Google. oraz jak wywoływać API dla konkretnego użytkownika. Gdy użytkownik zaloguje się za pomocą swojego konta Google i wyrazi zgodę na Twoją aplikację, token dostępu przyznane. Ten token dostępu identyfikuje użytkownika i jest wymagany jako w żądaniu do interfejsów Business Profile API.

Informacje o uruchamianiu tego kodu znajdziesz w sekcji Uruchamianie przykładowego kodu.

<!-- The top of file index.html -->
<html lang="en">
  <head>
    <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/business.manage">
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
    <script src="https://apis.google.com/js/platform.js" async defer></script>
  </head>
  <body>
    <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
    <script>
      var gmb_api_version = 'https://mybusinessaccountmanagement.googleapis.com/v1';
      function onSignIn(googleUser) {
        // Useful data for your client-side scripts:
        var profile = googleUser.getBasicProfile();
        console.log('Full Name: ' + profile.getName());
        console.log("Email: " + profile.getEmail());
        var access_token = googleUser.getAuthResponse().access_token;

        //Using the sign in data to make a Business Profile APIs call
        var req = gmb_api_version + '/accounts';
        var xhr = new XMLHttpRequest();
        xhr.open('GET', req);
        xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);

        //Displaying the API response
        xhr.onload = function () {
          document.body.appendChild(document.createTextNode(xhr.responseText));
        }
        xhr.send();
      }
    </script>
  </body>
</html>

Uruchamianie przykładu

Wykonaj te czynności, aby uruchomić podany przykładowy kod:

  1. Zapisz fragment kodu w pliku o nazwie index.html. Upewnij się, że w pliku jest ustawiony Twój identyfikator klienta.
  2. Uruchom serwer WWW tym poleceniem z katalogu roboczego:

    Python 2.X

    python -m SimpleHTTPServer 8000

    Python 3.X

    python -m http.server 8000
  3. Na stronie Dane logowania. w konsoli API i wybierz używany identyfikator klienta.

  4. W polu Autoryzowane źródła JavaScript wpisz adres URL swojej witryny. Do uruchom przykładowy kod podany w tym przewodniku, musisz też dodać http://localhost:8000.

  5. Wczytaj w przeglądarce następujący adres URL:

    http://localhost:8000/index.html