de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 pinoyyid
pinoyyid
Question

Bagaimana cara mengizinkan sebuah aplikasi (web atau dipasang) tanpa campur tangan pengguna?

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.

61 2013-11-04T11:37:23+00:00 2
 pinoyyid
pinoyyid
Pertanyaan edit 27 Januari 2019 в 9:45
Pemrograman
google-api
google-oauth
gmail-api
google-drive-api
Solution / Answer
 pinoyyid
pinoyyid
4 November 2013 в 11:37
2013-11-04T11:37:23+00:00
Lebih
Sumber
Sunting
#22707376

Hal ini dapat dilakukan dengan Oauth2 Bermain anak di https://developers.google.com/oauthplayground

Langkah-langkah:-

  1. Membuat Akun Google (misalnya. [email protected]) - Atau melewatkan langkah ini jika anda menggunakan account yang ada.
  2. Gunakan API konsol untuk mendaftarkan mydriveapp (https://console.developers.google.com/apis/credentials/oauthclient?project=mydriveapp atau hanya https://console.developers.google.com/apis/)
  3. Menciptakan satu set baru kredensial. Kredensial/Membuat Kredensial/Klien OAuth Id kemudian pilih aplikasi Web
  4. Termasuk https://developers.google.com/oauthplayground seperti yang valid mengarahkan URI
  5. Catatan ID klien (web app) dan Rahasia Klien
  6. Login sebagai [email protected]
  7. Pergi ke Oauth2 bermain anak
  8. Dalam Pengaturan (ikon roda gigi), set
  • Oauth aliran: server
  • Jenis akses: offline
  • Gunakan anda sendiri OAuth kredensial: CENTANG
  • Id klien dan Rahasia klien: dari langkah 5
  1. Klik Langkah 1 dan pilih Drive API https://www.googleapis.com/auth/drive (karena itu, teknik ini juga bekerja untuk Google Api terdaftar)
  2. Klik Authorize Api. Anda akan diminta untuk memilih akun Google anda dan mengkonfirmasi akses
  3. Klik Langkah 2 dan "Pertukaran kode Otorisasi untuk token"
  4. Salin kembali Refresh Token dan paste ke aplikasi anda, source code atau dalam beberapa bentuk penyimpanan dari mana aplikasi anda dapat mengambilnya.

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();
 pinoyyid
pinoyyid
Jawaban edit 21 Maret 2019 в 1:52
122
0
 m02ph3u5
m02ph3u5
14 Maret 2019 в 2:06
2019-03-14T14:06:30+00:00
Lebih
Sumber
Sunting
#22707377

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:

  1. Membuat Akun Google (misalnya. [email protected]) - Atau melewatkan langkah ini jika anda menggunakan account yang ada.
  2. Gunakan API konsol untuk mendaftarkan mydriveapp (https://console.developers.google.com/apis/credentials/oauthclient?project=mydriveapp atau hanya https://console.developers.google.com/apis/)
  3. Menciptakan satu set baru kredensial (NB ID Klien OAuth tidak Account Layanan Kunci dan kemudian pilih "Aplikasi Web" dari seleksi)

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):

OAuth sumber/redirect pengaturan

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:

login prompt

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!

3
0
Related communities 1
Ruang Belajar Google Ads
Ruang Belajar Google Ads
517 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi