Let's mengatakan bahwa saya memiliki sebuah aplikasi web yang membutuhkan untuk mengakses file Drive di layanan latar belakang. Itu akan baik sendiri file-file itu adalah mengakses, atau dapat dijalankan di Akun Google dengan yang pemilik telah berbagi dokumen.
Saya memahami bahwa saya perlu app refresh token, tapi I don't ingin menulis kode untuk mendapatkan yang sejak aku'll hanya pernah melakukannya sekali.
NB. Ini adalah TIDAK menggunakan Account Layanan. Aplikasi akan berjalan di bawah konvensional akun Google. Layanan Akun adalah pendekatan yang valid dalam beberapa situasi. Namun teknik menggunakan Oauth Bermain untuk mensimulasikan aplikasi dapat menyimpan banyak berlebihan usaha, dan berlaku untuk setiap Api yang sharing ke Akun Layanan yang tidak didukung.
Hal ini dapat dilakukan dengan Oauth2 Bermain anak di https://developers.google.com/oauthplayground
Langkah-langkah:-
Kredensial/Membuat Kredensial/Klien OAuth Id
kemudian pilih aplikasi Web
Aplikasi anda sekarang dapat berjalan tanpa pengawasan, dan menggunakan Refresh Token seperti yang dijelaskan https://developers.google.com/accounts/docs/OAuth2WebServer#offline untuk mendapatkan sebuah Access Token.
NB. Diketahui bahwa refresh token dapat berakhir oleh Google yang akan berarti bahwa anda perlu ulangi langkah 5 dan seterusnya untuk mendapatkan yang baru refresh token. Gejala ini akan menjadi tidak Valid Memberikan kembali ketika anda mencoba untuk menggunakan refresh token.
NB2. Teknik ini bekerja dengan baik jika anda ingin sebuah aplikasi web yang dapat anda akses sendiri (dan hanya anda sendiri) Drive akun, tanpa repot-repot menulis kode otorisasi yang hanya dijalankan sekali. Hanya melewatkan langkah 1, dan ganti "saya.drive.aplikasi" dengan alamat email anda sendiri di langkah 6. pastikan anda menyadari implikasi keamanan jika Refresh Token akan dicuri.
Melihat Woody's komentar di bawah ini di mana dia link untuk Google ini video
. . .
Berikut adalah cepat JavaScript rutin yang menunjukkan bagaimana untuk menggunakan Refresh Token dari OAuth Bermain untuk daftar beberapa file Drive. Anda hanya bisa copy-paste ke Chrome dev console, atau menjalankannya dengan node. Tentu saja menyediakan anda sendiri kredensial (orang-orang di bawah ini adalah palsu).
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();
Izinkan saya menambahkan rute alternatif untuk pinoyyid's jawaban yang sangat baik (yang tidak't bekerja untuk saya - popping mengarahkan kesalahan).
Alih-alih menggunakan OAuthPlayground anda juga dapat menggunakan SISA HTTP API langsung. Jadi perbedaan untuk pinoyyid's jawabannya adalah bahwa kita'll melakukan hal-hal lokal. Ikuti langkah 1-3 dari pinoyyid's jawaban. I'll mengutip mereka:
Sekarang, alih-alih bermain anak, tambahkan baris berikut ke kredensial anda:
Resmi JavaScript Sumber: http://localhost (I don't tahu apakah ini diperlukan, tetapi hanya melakukannya.) Resmi Mengarahkan Uri: http://localhost:8080
Screenshot (dalam bahasa jerman):
Pastikan untuk benar-benar menyimpan perubahan anda melalui tombol biru di bawah ini!
Sekarang anda'll mungkin ingin menggunakan GUI untuk membangun permintaan HTTP. Aku digunakan Insomnia tetapi anda dapat pergi dengan Pos atau polos cURL. Saya merekomendasikan Insomnia untuk hal ini memungkinkan anda untuk pergi melalui persetujuan layar dengan mudah.
Membangun baru MENDAPATKAN permintaan dengan parameter berikut:
URL: https://accounts.google.com/o/oauth2/v2/auth
Query Param: redirect_uri=http://localhost:8080
Query Param: prompt=consent
Query Param: response_type=code
Query Param: client_id=<your client id from OAuth credentials>
Query Param: scope=<your chosen scopes, e.g. https://www.googleapis.com/auth/drive.File>
Query Param: access_type=offline
Jika alat anda dari pilihan doesn't menangani URL encoding otomatis pastikan untuk mendapatkan yang benar pada diri sendiri.
Sebelum anda api permintaan anda mengatur webserver untuk mendengarkan http://localhost:8080
. Jika anda memiliki node dan npm diinstal jalankan npm saya menyatakan
, kemudian menciptakan index.js
:
``js var express = require('express'); var app = ekspres();
aplikasi.dapatkan('/', function (req, res) { res.mengirim('ok'); konsol.log(req) });
aplikasi.mendengarkan(8080, function () { konsol.log('Mendengarkan pada port 8080!'); }); ``
Dan menjalankan server melalui node index.js
. Saya sarankan untuk tidak log seluruh req
objek atau untuk menjalankan node index.js | kurang
untuk output penuh akan sangat besar.
Ada solusi yang sangat sederhana untuk bahasa lain, terlalu. E. g. menggunakan PHP's built in web server pada 8080 php -S localhost:8080
.
Sekarang api permintaan anda (Insomnia) dan anda akan diminta login:
Log in dengan email anda dan password dan konfirmasi persetujuan layar (harus mengandung yang anda pilih scope).
Kembali ke terminal dan memeriksa output. Jika anda login semuanya gulir ke bawah (misalnya pgdown kurang) sampai anda melihat garis dengan kode=4/...
.
Copy kode itu; itu adalah kode otorisasi anda bahwa anda'll ingin pertukaran untuk mengakses dan me-refresh token. Don't salin terlalu banyak - jika ada's ampersand &
tidak menyalin atau apa-apa setelah itu. &
menetapkan limit query parameter. Kami hanya ingin kode
.
Sekarang mengatur permintaan HTTP POST menunjuk ke https://www.googleapis.com/oauth2/v4/token
sebagai bentuk URL dikodekan. Dalam Insomnia anda bisa klik itu - dalam alat-alat lain yang mungkin anda miliki untuk mengatur header diri untuk Content-Type: application/x-www-form-urlencoded
.
Tambahkan parameter berikut:
code=<the authorization code from the last step>
client_id=<your client ID again>
client_secret=<your client secret from the OAuth credentials>
redirect_uri=http://localhost:8080
grant_type=authorization_code
Sekali lagi, pastikan bahwa pengkodean adalah benar.
Kebakaran permintaan anda dan memeriksa output dari server anda. Dalam respon anda harus melihat objek JSON:
json { "access_token": "xxxx", "expires_in": 3600, "refresh_token": "1/xxxx", "lingkup": "https://www.googleapis.com/auth/drive.file", "token_type": "Pembawa" }
Anda dapat menggunakan access_token
kan pergi tapi itu'll hanya akan berlaku selama satu jam. Catatan refresh token. Ini adalah salah satu yang anda dapat selalu* pertukaran untuk yang baru akses token.
*
, Anda akan harus mengulangi prosedur jika pengguna mengubah password-nya, mencabut akses, tidak aktif selama 6 bulan dll.
Bahagia OAuthing!