Jak autoryzować aplikację (internetową lub zainstalowaną) bez interwencji użytkownika?

Załóżmy, że mam aplikację internetową, która musi uzyskać dostęp do plików dysku w usłudze w tle. Będzie właścicielem plików, do których ma dostęp, lub będzie uruchamiany na koncie Google, z którym właściciel udostępnił dokumenty.

Rozumiem, że moja aplikacja wymaga odświeżania tokena, ale nie chcę pisać kodu, aby go uzyskać, ponieważ zrobię to tylko raz.

NB. To nie jest korzystanie z konta usługi. aplikacja będzie uruchamiana na konwencjonalnym koncie Google. I ' m nie mówiąc, że jest to dobry pomysł, konto Usługowe jest ważnym podejściem w niektórych sytuacjach. Jednak technika korzystania z OAuth Playground do symulacji aplikacji może zaoszczędzić sporo zbędnego wysiłku i dotyczy wszystkich interfejsów API, dla których udostępnianie na koncie usługi nie jest obsługiwane.

Author: pinoyyid, 2013-11-04

1 answers

Można to zrobić za pomocą OAuth2 Playground w https://developers.google.com/oauthplayground

Kroki:-

  1. Utwórz konto Google (np. [email protected])
  2. Użyj konsoli API, aby zarejestrować mydriveapp (https://console.developers.google.com/apis/credentials/oauthclient?project=mydriveapp lub po prostu https://console.developers.google.com/apis/)
  3. Utwórz nowy zestaw poświadczeń (NB OAuth Client ID Nie Service Account Key a następnie wybierz "Aplikacja internetowa" z wyboru)
  4. Include https://developers.google.com/oauthplayground jako poprawny URI przekierowania
  5. W tym celu należy zwrócić uwagę na identyfikator klienta (web app) i Client Secret (Client Secret).]}
  6. Zaloguj się jako [email protected]
  7. przejdź do OAuth2 playground
  8. w Ustawieniach (ikona koła zębatego), Ustaw
    • OAuth flow: server
    • Typ dostępu: offline
    • Użyj własnych poświadczeń OAuth: TICK
    • identyfikator klienta i tajemnica klienta: od kroku 5
  9. Kliknij Krok 1 i wybierz Drive API https://www.googleapis.com/auth/drive w przeciwieństwie do tego, w jaki sposób można korzystać z Google API, Google API nie jest w pełni kompatybilne z Google API.]}
  10. Kliknij Autoryzuj Interfejsy API. Zostanie wyświetlony monit o wybranie konta Google i potwierdzenie dostępu]}
  11. Kliknij Krok 2 i "wymień kod autoryzacyjny na tokeny"
  12. skopiuj zwrócony Token odświeżania i wklej go do aplikacji, kodu źródłowego lub do jakiejś formy pamięci z gdzie aplikacja może go pobrać.

Twoja aplikacja może teraz działać bez nadzoru i używać Tokena odświeżania zgodnie z opisem https://developers.google.com/accounts/docs/OAuth2WebServer#offline aby uzyskać Token dostępu.

NB. Pamiętaj, że token odświeżania może wygasnąć przez Google, co oznacza, że musisz powtórzyć kroki 5 Dalej, aby uzyskać nowy token odświeżania. Objawem tego będzie nieważna dotacja zwrócona podczas próby użycia tokenu odświeżania.

NB2. To technika działa dobrze, jeśli chcesz mieć aplikację internetową, która ma dostęp do własnego (i tylko własnego) konta Dysku, bez zawracania sobie głowy pisaniem kodu autoryzacyjnego, który byłby uruchamiany tylko raz. Po prostu pomiń krok 1 i zastąp "mój.jedź.aplikacja " z własnym adresem e-mail w kroku 5. upewnij się, że wiesz, jakie są konsekwencje dla bezpieczeństwa, jeśli Token odświeżania zostanie skradziony.

Zobacz komentarz Woody ' ego poniżej, gdzie łączy się z tym filmem Google https://www.youtube.com/watch?v=hfWe1gPCnzc

. . .

Oto szybka procedura JavaScript, która pokazuje, jak użyć Tokena odświeżania z placu zabaw OAuth, aby wyświetlić listę niektórych plików na dysku. Możesz po prostu skopiować i wkleić go do Chrome dev console lub uruchomić go za pomocą node. Oczywiście podaj swoje własne poświadczenia (te poniżej są fałszywe).

function get_access_token_using_saved_refresh_token() {
    // from the oauth playground
    const refresh_token = "1/0PvMAoF9GaJFqbNsLZQg-f9NXEljQclmRP4Gwfdo_0";
    // from the API console
    const client_id = "559798723558-amtjh114mvtpiqis80lkl3kdo4gfm5k.apps.googleusercontent.com";
    // from the API console
    const client_secret = "WnGC6KJ91H40mg6H9r1eF9L";
    // from https://developers.google.com/identity/protocols/OAuth2WebServer#offline
    const refresh_url = "https://www.googleapis.com/oauth2/v4/token";

    const post_body = `grant_type=refresh_token&client_id=${encodeURIComponent(client_id)}&client_secret=${encodeURIComponent(client_secret)}&refresh_token=${encodeURIComponent(refresh_token)}`;

    let refresh_request = {
        body: post_body,
        method: "POST",
        headers: new Headers({
            'Content-Type': 'application/x-www-form-urlencoded'
        })
    }

    // post to the refresh endpoint, parse the json response and use the access token to call files.list
    fetch(refresh_url, refresh_request).then( response => {
            return(response.json());
        }).then( response_json =>  {
            console.log(response_json);
            files_list(response_json.access_token);
    });
}

// a quick and dirty function to list some Drive files using the newly acquired access token
function files_list (access_token) {
    const drive_url = "https://www.googleapis.com/drive/v3/files";
    let drive_request = {
        method: "GET",
        headers: new Headers({
            Authorization: "Bearer "+access_token
        })
    }
    fetch(drive_url, drive_request).then( response => {
        return(response.json());
    }).then( list =>  {
        console.log("Found a file called "+list.files[0].name);
    });
}

get_access_token_using_saved_refresh_token();
 94
Author: pinoyyid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-21 08:10:17