Hai, saya mencoba mengotomatiskan penerapan fungsi firebase. Ketika saya menjalankan sesuatu seperti “GOOGLE_APPLICATION_CREDENTIALS=
3.18.5
simpul kontainer
/usr/bin/docker run --rm -v /workspace:/workspace -e GOOGLE_APPLICATION_CREDENTIALS=
Untuk diautentikasi
[2018-05-29T15:57:32.507Z] > perintah memerlukan cakupan: [“email”,“openid”,“https://www.googleapis.com/auth/cloudplatformprojects.readonly“,”https://www .googleapis.com/auth/firebase”]
[2018-05-29T15:57:32.507Z] > mencoba mengautentikasi melalui kredensial default aplikasi
[2018-05-29T15:57:32.547Z] ! kesalahan autentikasi otomatis: Cakupan diperlukan untuk permintaan ini.
[2018-05-29T15:57:32.547Z] > kredensial tidak dapat ditemukan atau diambil secara otomatis
Apakah Anda memiliki beberapa saran?
Hai, kredensial yang diperlukan bukan GOOGLE_APPLICATION_CREDENTIALS, jadi baris itu tidak benar-benar membantu Anda.
Anda harus membuat token CI dan kemudian menjalankan perintah dengan flag --token, lihat https://github.com/firebase/firebase-tools#using -with-ci-systems untuk info lebih lanjut.
Hai,
dan bagaimana dengan https://github.com/firebase/firebase-tools/pull/417 ?
Tampaknya GOOGLE_APPLICATION_CREDENTIALS diimplementasikan dan firebase-tools menggunakan google-auto-auth untuk mendapatkannya.
Atau aku salah?
Saya tidak akan menggunakan token CI karena saya ingin mengautentikasi dengan akun layanan dan bukan pengguna Google (GSuite atau Cloud Identity atau apa pun)
Terima kasih
Hai,
sepertinya perpustakaan membuat panggilan ke firebase-public.firebaseio. com:443 dan memiliki kode pengembalian HTTP 200 tetapi respons 0 byte
Hai, Anda benar. Maaf, saya lupa tentang PR itu. Saya tidak terlalu akrab dengan ini. Michael, bisakah kamu melihat ketika kamu kembali ke kantor?
Hai @laurenzlong @mbleigh ,
Saya telah menemukan bahwa mengonfigurasi "Otoritas Luas Domain" untuk izin akun layanan untuk mengautentikasi.
Tapi sekarang saya punya masalah berikut:
GOOGLE_APPLICATION_CREDENTIALS=<path_to_json> firebase deploy --only functions --non-interactive --project=<project_id> --debug
[2018-06-04T09:25:46.202Z] ----------------------------------------------------------------------
[2018-06-04T09:25:46.211Z] CLI Version: 3.18.5
[2018-06-04T09:25:46.212Z] Platform: linux
[2018-06-04T09:25:46.212Z] Node Version: v6.14.2
[2018-06-04T09:25:46.212Z] Time: Mon Jun 04 2018 09:25:46 GMT+0000 (UTC)
[2018-06-04T09:25:46.213Z] ----------------------------------------------------------------------
[2018-06-04T09:25:46.238Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2018-06-04T09:25:46.238Z] > attempting to authenticate via app default credentials
[2018-06-04T09:25:46.445Z] xxxx.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xx
[2018-06-04T09:25:46.446Z] > retrieved access token via default credentials
[2018-06-04T09:25:46.449Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/projects/<project_id>
Mon Jun 04 2018 09:25:46 GMT+0000 (UTC)
[2018-06-04T09:25:47.067Z] <<< HTTP RESPONSE 404 server=nginx, date=Mon, 04 Jun 2018 09:25:47 GMT, content-type=application/json; charset=utf-8, content-length=87, connection=close, x-content-type-options=nosniff
[2018-06-04T09:25:47.069Z] <<< HTTP RESPONSE BODY code=PROJECT_NOT_FOUND, message=The specified project was not found.
Akun layanan memiliki izin Editor pada proyek, dan jika saya menggunakan identitas Google (bukan akun svc) masalahnya tidak ada
Saya telah menemukan masalah serupa ini (tetapi mereka menggunakan token) https://github.com/firebase/firebase-tools/issues/744
Terima kasih
Tidak, aku salah.
Jika saya menjalankan penggunaan firebase, saya punya lagi:
[2018-06-04T14:39:38.660Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase"]
[2018-06-04T14:39:38.660Z] > attempting to authenticate via app default credentials
[2018-06-04T14:39:38.693Z] ! auto-auth error: Scopes are required for this request.
[2018-06-04T14:39:38.694Z] > no credentials could be found or automatically retrieved
Perilaku yang sama bahkan dengan akun layanan yang memiliki peran Owner
ditetapkan untuk mencoba melakukan apa pun menggunakan alat CLI firebase
:
$ export GOOGLE_APPLICATION_CREDENTIALS=account.json
$ firebase list --debug
[2018-06-05T12:15:17.340Z] ----------------------------------------------------------------------
[2018-06-05T12:15:17.343Z] Command: /usr/local/bin/node /usr/local/bin/firebase list --debug
[2018-06-05T12:15:17.343Z] CLI Version: 3.18.5
[2018-06-05T12:15:17.343Z] Platform: linux
[2018-06-05T12:15:17.343Z] Node Version: v10.3.0
[2018-06-05T12:15:17.343Z] Time: Tue Jun 05 2018 12:15:17 GMT+0000 (UTC)
[2018-06-05T12:15:17.343Z] ----------------------------------------------------------------------
[2018-06-05T12:15:17.347Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase"]
[2018-06-05T12:15:17.348Z] > attempting to authenticate via app default credentials
[2018-06-05T12:15:17.352Z] ! auto-auth error: Scopes are required for this request.
[2018-06-05T12:15:17.352Z] > no credentials could be found or automatically retrieved
Error: Command requires authentication, please run firebase login
Petunjuk kecil adalah bahwa token akses kosong (saya memiliki masalah yang sama, saya memecahkan kode JWT)
Tersirat dari bentuknya
xxxx.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X tengah adalah payload data dan berukuran 1 karakter, jadi jelas tidak terlalu penuh.
firebase-tools menggunakan google-auto-auth untuk mendapatkan token jadi saya pikir masalahnya mungkin ada di sana.
Ups, versi baru ( 3.18.6
) tampaknya masih belum lulus authScopes
ke autoAuth()
. Jika saya menambahkan pernyataan log sebelum baris ini: https://github.com/firebase/firebase-tools/blob/b2594467d8980c5a1e2b8c4aff3de9877a98b42b/lib/requireAuth.js#L21
Saya mendapatkan authScopes: undefined
.
Jika saya menambahkan
authScopes = [
scopes.EMAIL,
scopes.OPENID,
scopes.CLOUD_PROJECTS_READONLY,
scopes.FIREBASE_PLATFORM,
];
sebelum baris itu, kemudian melanjutkan untuk mendapatkan token akses, tetapi gagal dengan PROJECT_NOT_FOUND
Juga @tomlarkworthy , token OAuth itu bukan JWT, jadi tidak boleh berisi bagian tengah. Jika Anda menjalankannya di https://developers.google.com/apis-explorer/#search/oauth2/oauth2/v2/oauth2.tokeninfo , itu dilaporkan sebagai token yang valid dengan "scope": "https://www.googleapis.com/auth/cloudplatformprojects.readonly https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/userinfo.email",
Terima kasih! OK Jadi ketika saya mendapatkan proyek tidak ditemukan kesalahan. Ketika saya memecahkan kode token, saya hanya memiliki satu cakupan " https://www.googleapis.com/auth/cloud-platform ".
Ada perbedaan antara "normal" token (yaitu satu diperoleh melalui firebase login
):
{
"issued_to": "563584335869-fgrhgmd47bqnekij5i8b5pr03ho849e6.apps.googleusercontent.com",
"audience": "563584335869-fgrhgmd47bqnekij5i8b5pr03ho849e6.apps.googleusercontent.com",
"user_id": "xxxyyy",
"scope": "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloudplatformprojects.readonly https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/plus.me",
"expires_in": 3484,
"email": "[email protected]",
"verified_email": true,
"access_type": "offline"
}
dan yang dihasilkan dari akun layanan (SA):
{
"issued_to": "1160xxxx",
"audience": "1160xxxx",
"user_id": "1160xxxx",
"scope": "https://www.googleapis.com/auth/cloudplatformprojects.readonly https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/userinfo.email",
"expires_in": 3563,
"email": "[email protected]",
"verified_email": true,
"access_type": "offline"
}
Jadi tampaknya token tidak dikeluarkan di sebelah kanan audience
dan user_id
, yang seharusnya berasal dari https://github.com/firebase/firebase-tools/blob/376678fef91f71de5859f14d8374b2d8d2731980/ lib/api.js#L84
@tomlarkworthy masih aneh, authScope
adalah undefined
kecuali saya secara eksplisit menambahkan cakupan yang tepat. Apakah Anda firebase logout
sebelum menjalankan yang ini?
OK bahwa ID klien adalah klien oath2, yang memiliki domain yang sangat spesifik yang dapat bekerja dikonfigurasi di luar jangkauan kami. Dan/atau memerlukan interaksi pengguna di localhost. Jadi itu sangat sulit untuk mendapatkan otorisasi di CI.
Saya menjalankan milik saya pada suatu fungsi. Saya tidak memiliki kesalahan yang sama seperti Anda. Saya memiliki proyek yang tidak ditemukan seperti poster aslinya.
Jika saya membuat token saya sendiri dari akun layanan dan meneruskannya dengan --token, saya mendapatkan:-
HTTP RESPONSE 401 bervariasi=X-Origin, Origin,Accept-Encoding, www-authenticate=Bearer realm=" https://accounts.google.com/ ", content-type=application/json; charset=UTF-8, tanggal=Kamis, 07 Jun 2018 00:16:43 GMT, kedaluwarsa=Kamis, 07 Jun 2018 00:16:43 GMT, cache-control=private, max-age=0, x-content- type-options=nosniff, x-frame-options=SAMAASAL, x-xss-protection=1; mode=blok, server=GSE, alt-svc=quic=":443"; ma=2592000; v="43,42,41,39,35", rentang-terima=tidak ada, koneksi=tutup
[2018-06-07T00:16:43.786Z] <<< HTTP RESPONSE BODY error=unauthorized_client, error_description=Unauthorized
[2018-06-07T00:16:43.791Z] > perintah memerlukan cakupan: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www .googleapis.com/auth/firebase"]
[2018-06-07T00:16:43.792Z] > otorisasi melalui --token option
[2018-06-07T00:16:43.792Z] > menyegarkan token akses dengan cakupan: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https:/ /www.googleapis.com/auth/firebase"]
[2018-06-07T00:16:43.793Z] >>> POST PERMINTAAN HTTP https://www.googleapis.com/oauth2/v3/token
{ refresh_token: 'ya29.c.XXXXXXXXXXXX',
client_id: '563584335869-fgrhgmd47bqnekij5i8b5pr03ho849e6.apps.googleusercontent.com',
client_secret: 'j9iVZfS8kkCEFUPaAeJV0sAi',
grant_type: 'refresh_token',
cakupan: 'email openid https://www.googleapis.com/auth/cloudplatformprojects.readonly https://www.googleapis.com/auth/firebase ' }
Saya pikir id klien sumpah ini menghalangi?
@tomlarkworthy belum tentu sulit - Saya sedang menguji konfigurasi dengan clientId
sekarang.
Oh, Anda dapat mengganti nilai-nilai ini:
https://github.com/firebase/firebase-tools/blob/376678fef91f71de5859f14d8374b2d8d2731980/lib/api.js
Saya mencoba membuat proyek khusus dengan klien oauth-nya sendiri dan mengganti firebase-tools client_id dan secret_id. Kemudian saya mengotorisasi aplikasi web sumpah, menyalin token dan menggunakannya untuk memanggil firebase-tools. Ini menempuh jalur yang sedikit berbeda dan berhasil menyegarkan token tetapi kemudian gagal mendapatkan daftar proyek. Saya mengkonfirmasi di token decoder itu memiliki lingkup hanya-baca cloudplatformprojects sehingga seharusnya bisa membacanya.
info: stderr: [2018-06-07T01:02:21.126Z] Env Overrides: FIREBASE_CLIENT_ID, FIREBASE_CLIENT_SECRET
[2018-06-07T01:02:21.126Z] -------------------------------------- --------------------------------
info: stderr: [2018-06-07T01:02:21.138Z] > perintah memerlukan cakupan: ["email","openid"," https://www.googleapis.com/auth/cloudplatformprojects.readonly "," https ://www.googleapis.com/auth/firebase "," https://www.googleapis.com/auth/cloud-platform "]
info: stderr: [2018-06-07T01:02:21.138Z] > otorisasi melalui --token option
[07-06-2018T01:02:21.140Z] > menyegarkan token akses dengan cakupan: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https:/ /www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2018-06-07T01:02:21.140Z] >>> POSTING PERMINTAAN HTTP https://www.googleapis.com/oauth2/v3/token
{ refresh_token: 'ya29.XXX',
client_id: '278696186940-fbqtl733l62g4qj8aekr4i66cpo0k5c1.apps.googleusercontent.com',
client_secret: 'XXXX',
grant_type: 'refresh_token',
cakupan: 'email openid https://www.googleapis.com/auth/cloudplatformprojects.readonly https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/cloud-platform ' }
Rabu 06 Juni 2018 18:02:21 GMT-0700 (PDT)
info: stderr: [07-06-2018T01:02:21.318Z] <<< HTTP RESPON 200 x-google-netmon-label=/bns/ph/borg/ph/bns/apiserving/prod_hightraffic_api_frontend.server/998, x -google-gfe-backend-request-info=eid=HYQYW5jODYyytgbB3JfoAg, cache-control=no-cache, no-store, max-age=0, must-revalidate, pragma=no-cache, expired=Mon, 01 Jan 1990 00:00:00 GMT, tanggal=Kamis, 07 Jun 2018 01:02:21 GMT, bervariasi=X-Origin, Origin,Accept-Encoding, x-google-session-info=GgIYBiAB, content-type=application/json ; charset=UTF-8, x-content-type-options=nosniff, x-frame-options=SAMAORIGIN, x-xss-protection=1; mode=block, server=GSE, x-google-servertype=apiserving, x-google-gfe-request-trace=acsfoh11:443,phnm21-v6:9897,/bns/ph/borg/ph/bns/apiserving/prod_hightraffic_api_frontend .server/998,phnm21-v6:9897,acsfoh11:443, x-google-gslb-service=apiserving-hightraffic, x-google-backends=plbn61:9882,/bns/ph/borg/ph/bns/apiserving/ prod_hightraffic_api_frontend.server/998,phnm21-v6:9897,/bns/ph/borg/ph/bns/traffic-prod/shared-layer2-gfe/495,acsfoh11:443, x-google-dos-service-trace= main :identity-o-auth-2-service-migration , main:shared-layer2-gfe , x-google-service=identity-o-auth-2-service-migration,restricted-shared-layer2-grpc-agregate, x -google-gfe-response-code-details-trace=response_code_set_by_backend,response_code_set_by_backend, x-google-gfe-response-body-transformations=gunzipped, x-google-shellfish-status=CA0gBEBG, alt-svc=quic=":443 "; ma=2592000; v="43,42,41,39,35", x-google-gfe-service-trace=identity-o-auth-2-service-migration,restricted-shared-layer2-grpc-aggregate, accept-ranges= tidak ada, koneksi = tutup
info: stderr: [07-06-2018T01:02:21.319Z] >>> PERMINTAAN HTTP DAPATKAN https://admin.firebase.com/v1/projects/docsite-go
Rabu 06 Juni 2018 18:02:21 GMT-0700 (PDT)
info: stderr: [07-06-2018T01:02:21.652Z] <<< HTTP RESPONSE 404 server=nginx, tanggal=Kamis, 07 Jun 2018 01:02:21 GMT, content-type=application/json; charset=utf-8, content-length=87, connection=close, x-content-type-options=nosniff
info: stderr: [07-06-2018T01:02:21.652Z] <<< HTTP RESPONSE BODY code=PROJECT_NOT_FOUND, message=Proyek yang ditentukan tidak ditemukan.
@tomlarkworthy mengesampingkan client_id dan rahasia dengan nilai khusus tidak akan berfungsi, karena Firebase saat ini menggunakan klien yang telah ditentukan sebelumnya yang terpisah dari proyek pelanggan mana pun (setidaknya itulah pemahaman saya).
Selain itu, opsi --token
hanya mendukung token penyegaran, yang tidak Anda dapatkan jika Anda memiliki akun layanan (sekali lagi, sejauh yang saya mengerti).
Kita perlu menemukan cara sederhana untuk menghasilkan token akses SA dengan ID klien ini, jika memungkinkan.
Dimungkinkan untuk mengambil rute alternatif dan memanggil Firebase API dengan klien JWT alih-alih token OAuth, seperti yang dijelaskan di sini: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#jwt -auth
google/google-auth-library-nodejs , yang digunakan secara internal oleh stephenplusplus/google-auto-auth , menyediakan metode yang lebih nyaman/aman untuk melakukan ini.
Saya tidak berpikir kita bisa membuat kemajuan.
https://github.com/firebase/firebase-tools/issues/647#issuecomment -361926336 tampaknya telah melaporkan keberhasilan sebelumnya, meskipun tidak yakin apakah itu dikonfirmasi. Tampaknya Firebase API yang dimaksud (https://admin.firebase.com/v1/projects) bersifat private , dan hanya menerima token yang dibuat untuk ID klien tersebut.
Mungkin ini harus diajukan sebagai permintaan fitur - memiliki kemampuan untuk menggunakan akun layanan untuk penerapan akan memungkinkan penggunaan kredensial tunggal (dan dipisahkan dari pengguna mana pun) untuk menerapkan sumber daya Firebase dan GCP.
Opsi --token
dalam CLI dimaksudkan untuk diberikan token penyegaran , bukan token akses. Itu yang dihasilkan dari firebase login:ci
.
Saya belum menguji otorisasi akun layanan secara ekstensif, tetapi saya menduga bahwa mungkin ada pemeriksaan IAM yang memerlukan izin luas yang terjadi di backend admin.firebase.com
. Kami dapat menyelidiki lebih lanjut, tetapi saya tidak mengharapkan resolusi super cepat di sini.
Opsi --token di CLI dimaksudkan untuk diberikan token penyegaran
Ya, dipahami seperti yang disebutkan di atas.
Akan luar biasa menggunakan kunci SA untuk diterapkan dari lingkungan CI. Token penyegaran terikat pada pengguna tertentu, dan tidak jelas cara menggunakannya untuk mengautentikasi perintah gcloud
untuk mengelola layanan GCP lainnya. Saat ini, kami harus menyediakan kedua jenis kredensial (token penyegaran pengguna admin untuk Firebase CLI, dan kunci SA untuk gcloud
).
Saya dapat FIREBASE_TOKEN='<token_here>' firebase deploy --only firestore,storage
(Saya belum mencoba target lain, mungkin saja berhasil) menggunakan token yang dibuat untuk akun layanan.
Token sebenarnya dibuat untuk akun layanan oleh mesin rahasia GCP vault dengan cakupan " https://www.googleapis.com/auth/cloud-platform ".
Saya mengonfirmasi bahwa tidak mungkin menggunakan kunci SA + GOOGLE_APPLICATION_CREDENTIALS, dengan cli firebase terbaru, semua perintah keluar dengan:
root<strong i="6">@frontend</strong>:/usr/src/app$ firebase list
Error: HTTP Error: 404, The specified project was not found.
Having trouble? Try firebase list --help
@cpick itu menarik, apakah Anda tahu bagaimana vault menghasilkan token oauth untuk akun layanan?
@paolomainardi firebase list
tidak akan berfungsi dengan kunci SA karena bergantung pada implementasi daftar proyek lama. Namun, hampir semua hal lain seharusnya (meskipun Anda mungkin perlu mengaktifkan beberapa API terlebih dahulu). Saya akan merekomendasikan mencoba perintah lain dan lihat.
Kami sedang berupaya mendapatkan dukungan penuh untuk GOOGLE_APPLICATION_CREDENTIALS
tanpa melewati banyak rintangan karena kami pikir ini membuka beberapa kasus penggunaan yang hebat.
@paolomainardi Saya pikir implementasi vault
ada di sini (itu hanya tebakan setelah pencarian cepat melalui kodenya).
Saya juga berpikir itu hal yang sama yang dilakukan gcloud alpha iam service-accounts sign-jwt
(sekali lagi, tebakan yang agak terpelajar).
Terima kasih banyak @cpick , saya akan terus
Saya melihat sekilas ini dan sebagai tes mencoba memaksa melalui kredensial akun layanan dan access_token
ke requireAuth.js
dalam upaya untuk setidaknya melihat sesuatu bekerja.
Tampaknya cli selalu mencoba untuk menghubungi https://admin.firebase.com/v1/projects/
tidak peduli apa (Anda dapat apa yang saya maksud dengan bendera --debug
. Jika saya membaca komentar sebelumnya dalam masalah ini, itu mungkin 'legacy 'titik akhir api yang tidak' berfungsi dengan akun svc.
Saya memang menguji beberapa titik akhir lainnya dengan panggilan GET
dan tampaknya baik-baik saja:
untuk ref
requireAuth.js
hanya untuk pengujian yang akan mengembalikan token akses svc_accounts dengan cakupan luasfunction getServiceAccountClient() {
const credFile = '/path/to/cert.json';
const keys = require(credFile);
let client = new JWT(
keys.client_email,
null,
keys.private_key,
["email","openid","https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase"],
);
return client;
};
function _autoAuth(options, authScopes) {
return new Promise(function(resolve, reject) {
var client = getServiceAccountClient();
client.getAccessToken().then(res => {
console.log(res);
api.setAccessToken(res.token);
resolve();
}).catch(function (error) {
console.error('Unable to recall targetClient access_token ' + error);
});
/*
logger.debug("> attempting to authenticate via app default credentials");
......
const {JWT} = require('google-auth-library');
function getServiceAccountClient() {
const credFile = '/path/to/cert.json';
const keys = require(credFile);
let client = new JWT(
keys.client_email,
null,
keys.private_key,
["email","openid","https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase"],
);
return client;
};
var client = getServiceAccountClient();
let project_id = 'your_project';
let url = 'https://admin.firebase.com/v1/projects/' + project_id
//let url = "https://firestore.googleapis.com/v1beta1/projects/" + project_id + "/databases/(default)/indexes"
//let url = "https://firebaserules.googleapis.com/v1/projects/" + project_id + "/rulesets"
client.requestAsync({url}).then(resp => {
console.log(resp.data);
}).catch(function (error) {
console.error('Unable to list buckets: ' + error);
});
Saya akhirnya dapat menggunakan akun layanan ke firestore
, storage
dan hosting
setelah melakukan pengeditan pada requireAuth.js seperti yang Intisari ini
Berikut ini pada dasarnya adalah peretasan dan tidak lengkap karena tidak berfungsi dengan penerapan functions
. Solusi lengkap yang disebutkan oleh mbleigh di atas untuk 'dukungan kelas satu' patut ditunggu.
Bagaimanapun, saya memverifikasinya sebagai berikut:
Mulailah dengan akun firebase yang juga dalam konteks dengan gcloud
$ gcloud iam service-accounts list
NAME EMAIL
App Engine default service account [email protected]
firebase-adminsdk firebase-adminsdk-h2v8k@firebase-auth-sal.iam.gserviceaccount.com
gcloud iam service-accounts keys create `pwd`/svc.json --iam-account=firebase-adminsdk-h2v8k@firebase-auth-sal.iam.gserviceaccount.com
Tambahkan akun layanan sebagai OWNER
pada proyek itu
Buka konsol cloud dan aktifkan beberapa API:
https://console.developers.google.com/apis/api/cloudresourcemanager.googleapis.com/overview?project=<your_project>
https://console.developers.google.com/apis/api/firebasehosting.googleapis.com/overview?project=<your_project>
Untuk gcloud
dan firebase
$ firebase logout
✔ Logged out from [email protected]
$ mv ~/.config/gcloud ~/.config/gcloud_backup
ADC
env-var dan terapkanexport GOOGLE_APPLICATION_CREDENTIALS=`pwd`/svc.json
$ firebase deploy -P firebase-auth-sal --only firestore,hosting,storage
{ token: 'ya29.c.EmJ8B....', res: null }
=== Deploying to 'firebase-auth-sal'...
i deploying storage, firestore, hosting
i storage: checking storage.rules for compilation errors...
✔ storage: rules file storage.rules compiled successfully
i firestore: checking firestore.rules for compilation errors...
i firestore: reading indexes from firestore.indexes.json...
✔ firestore: rules file firestore.rules compiled successfully
i storage: uploading rules storage.rules...
i firestore: uploading rules firestore.rules...
✔ firestore: deployed indexes in firestore.indexes.json successfully
i hosting[fir-auth-sal]: beginning deploy...
i hosting[fir-auth-sal]: found 1 files in public
✔ hosting[fir-auth-sal]: file upload complete
✔ storage: released rules storage.rules to firebase.storage/firebase-auth-sal.appspot.com
✔ firestore: released rules firestore.rules to cloud.firestore
i hosting[fir-auth-sal]: finalizing version...
✔ hosting[fir-auth-sal]: version finalized
i hosting[fir-auth-sal]: releasing new version...
✔ hosting[fir-auth-sal]: release complete
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/firebase-auth-sal/overview
Hosting URL: https://fir-auth-sal.firebaseapp.com
functions
functions
jenis penerapan mobilesdk.googleapis.com
. Mungkin penerapan fungsi firebase terkait dengan client_id
untuk fungsi firebase atau entah bagaimana membutuhkan 3LO....tapi itu semua dugaan
$ firebase deploy -P firebase-auth-sal --only functions --debug
[2018-12-24T01:36:44.034Z] >>> HTTP REQUEST GET https://servicemanagement.googleapis.com/v1/services/cloudfunctions.googleapis.com/projectSettings/firebase-auth-sal?view=CONSUMER_VIEW
[2018-12-24T01:36:44.034Z] >>> HTTP REQUEST GET https://servicemanagement.googleapis.com/v1/services/runtimeconfig.googleapis.com/projectSettings/firebase-auth-sal?view=CONSUMER_VIEW
[2018-12-24T01:36:44.486Z] <<< HTTP RESPONSE 404 vary=X-Origin, Referer, Origin,Accept-Encoding, content-type=application/json; charset=UTF-8, date=Mon, 24 Dec 2018 01:36:44 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="44,43,39,35", accept-ranges=none, connection=close
[2018-12-24T01:36:44.486Z] <<< HTTP RESPONSE BODY code=404, message=Method not found., status=NOT_FOUND
Error: HTTP Error: 404, Method not found.
[2018-12-24T01:36:44.495Z] Error Context: {
"body": {
"error": {
"code": 404,
"message": "Method not found.",
"status": "NOT_FOUND"
Referensi bug internal: 122552119
Apakah ada pembaruan tentang masalah ini @tinaliang ? Saya pikir dukungan akun layanan untuk otentikasi harus menjadi prioritas tinggi.
Tidak ada pembaruan saat ini ...
Temuan saya dari hari terakhir adalah bahwa saya tidak memerlukan fungsi Firebase Cloud khusus sehingga saya dapat menggunakan fungsi GCP Cloud https://cloud.google.com/functions/ yang berfungsi seperti yang diharapkan (penyebaran dilakukan melalui gcloud CLI) Namun, ini bukan solusi sebenarnya ... tapi mungkin bisa membantu seseorang :)
Digandakan oleh #1175
Sudah ada update belum? Saya mencoba menerapkan aplikasi Firebase saya melalui Cloud Build. hosting
dll. tampaknya berfungsi dan disebarkan dengan benar. functions
tidak akan digunakan dengan benar dan saya mendapatkan 404
, seperti dijelaskan di atas, dengan konfigurasi yang tepat dalam IAM. (Akun layanan cloudbuild
memiliki hak untuk "Admin Firebase" dan "Admin Kunci API".) Tiket ini harus memiliki prioritas tinggi
Belum ada pembaruan, tetapi kami berharap untuk segera melihatnya.
@mbleigh ada pembaruan? mengonfirmasi sampai sekarang firebase CLI tidak dapat menggunakan akun layanan untuk menyebarkan? kami menginginkannya untuk alat CI. jadi dukungan GOOGLE_APPLICATION_CREDENTIALS tidak berfungsi?
Seperti disebutkan sebelumnya, tidak semua perintah CLI firebase
akan bekerja dengan GOOGLE_APPLICATION_CREDENTIALS
, tetapi jumlah yang baik seharusnya. Menyetelnya ke jalur kredensial akun layanan Anda harus menjadi semua yang perlu Anda lakukan (sebenarnya, itulah yang dilakukan skrip test-hosting.sh
, antara lain).
Menggunakan firebase login:ci
Anda harus dapat menggunakan token di sistem CI Anda
Memformalkan penggunaan dan kemampuan GOOGLE_APPLICATION_CREDENTIALS
ada di pikiran kami, tetapi kami tidak dapat berkomitmen pada garis waktu di dalamnya. Terima kasih atas kesabaran Anda.
Bisakah Anda mengklarifikasi - akankah instance metadata ADC berfungsi dalam kasus ini, atau hanya GOOGLE_APPLICATION_CREDENTIALS
?
Siapa pun di utas ini: jika Anda merasa ingin bertualang, saya ingin Anda mencoba cabang di # 1463 dan melihat apakah itu memungkinkan Anda melakukan hal-hal yang ingin Anda lakukan dengan autentikasi akun layanan. Saya pikir kami mungkin telah menopang sebagian besar masalah, tetapi saya ingin melakukan pengujian eksternal semacam itu.
@mbleigh firebase apps:list web
akan gagal sebentar-sebentar di Cloud Build. Menjalankan dengan debug tidak memberi kami informasi apa pun tentang alasan kegagalan. Setiap pemikiran tentang apa yang bisa terjadi?
[2020-02-13T21:25:55.987Z] ----------------------------------------------------------------------
[2020-02-13T21:25:55.991Z] Command: /usr/local/bin/node /workspace/node_modules/.bin/firebase apps:list web -j --project=projectName --debug
[2020-02-13T21:25:55.991Z] CLI Version: 7.12.1
[2020-02-13T21:25:55.991Z] Platform: linux
[2020-02-13T21:25:55.991Z] Node Version: v10.18.0
[2020-02-13T21:25:55.992Z] Time: Thu Feb 13 2020 21:25:55 GMT+0000 (Coordinated Universal Time)
[2020-02-13T21:25:55.992Z] ----------------------------------------------------------------------
Selain itu, perintah @mbleigh firebase use projectName
juga akan sesekali gagal karena gagal menarik kredensial yang tepat dari server metadata:
[2020-02-13T21:49:41.050Z] ----------------------------------------------------------------------
[2020-02-13T21:49:41.055Z] Command: /usr/bin/node /directory/node_modules/.bin/firebase --debug use projectName
[2020-02-13T21:49:41.056Z] CLI Version: 7.12.1
[2020-02-13T21:49:41.056Z] Platform: linux
[2020-02-13T21:49:41.056Z] Node Version: v10.16.3
[2020-02-13T21:49:41.056Z] Time: Thu Feb 13 2020 21:49:41 GMT+0000 (Coordinated Universal Time)
[2020-02-13T21:49:41.056Z] ----------------------------------------------------------------------
[2020-02-13T21:49:41.057Z]
[2020-02-13T21:49:41.073Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2020-02-13T21:49:41.073Z] > attempting to authenticate via app default credentials
[2020-02-13T21:49:41.669Z] TypeError: Cannot create property 'refresh_token' on string 'Not Found
'
at /directory/node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/oauth2client.js:208:28
at /directory/node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/computeclient.js:85:7
at Request._callback (/directory/node_modules/google-auto-auth/node_modules/google-auth-library/lib/transporters.js:106:7)
at Request.self.callback (/directory/node_modules/request/request.js:185:22)
at Request.emit (events.js:198:13)
at Request.EventEmitter.emit (domain.js:448:20)
at Request.<anonymous> (/directory/node_modules/request/request.js:1161:10)
at Request.emit (events.js:198:13)
at Request.EventEmitter.emit (domain.js:448:20)
at IncomingMessage.<anonymous> (/directory/node_modules/request/request.js:1083:12)
at Object.onceWrapper (events.js:286:20)
at IncomingMessage.emit (events.js:203:15)
at IncomingMessage.EventEmitter.emit (domain.js:448:20)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
Pada 10/02/20 saya mulai melihat kegagalan intermiten saat menggunakan cloudbuild untuk diterapkan ke hosting firebase saat menggunakan akun layanan. Itu secara konsisten baik-baik saja untuk sementara waktu sebelum itu dan sekarang tampaknya lebih sering gagal daripada tidak. Saya mulai bertanya-tanya apakah ada satu set izin baru yang perlu saya delegasikan ke akun layanan sehingga dapat melakukan ini dengan sukses. Ini menjadi sedikit masalah karena sebagian besar penerapan saya gagal
Di bawah ini adalah tangkapan layar dengan contoh build dan ketika mereka tiba-tiba mulai gagal:
Kesalahan debug sangat mirip dengan komentar di atas:
[2020-02-16T07:30:46.905Z] ----------------------------------------------------------------------
[2020-02-16T07:30:46.908Z] Command: /usr/local/bin/node /home/node/.npm-global/bin/firebase deploy --only hosting -P project-production --debug
[2020-02-16T07:30:46.908Z] CLI Version: 7.8.1
[2020-02-16T07:30:46.908Z] Platform: linux
[2020-02-16T07:30:46.909Z] Node Version: v12.13.1
[2020-02-16T07:30:46.909Z] Time: Sun Feb 16 2020 07:30:46 GMT+0000 (Coordinated Universal Time)
[2020-02-16T07:30:46.910Z] ----------------------------------------------------------------------
[2020-02-16T07:30:46.910Z]
[2020-02-16T07:30:46.920Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2020-02-16T07:30:46.920Z] > attempting to authenticate via app default credentials
[2020-02-16T07:30:47.023Z] TypeError: Cannot create property 'refresh_token' on string 'Not Found
'
at /home/node/.npm-global/lib/node_modules/firebase-tools/node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/oauth2client.js:208:28
at /home/node/.npm-global/lib/node_modules/firebase-tools/node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/computeclient.js:85:7
at Request._callback (/home/node/.npm-global/lib/node_modules/firebase-tools/node_modules/google-auto-auth/node_modules/google-auth-library/lib/transporters.js:106:7)
at Request.self.callback (/home/node/.npm-global/lib/node_modules/firebase-tools/node_modules/request/request.js:185:22)
at Request.emit (events.js:210:5)
at Request.EventEmitter.emit (domain.js:475:20)
at Request.<anonymous> (/home/node/.npm-global/lib/node_modules/firebase-tools/node_modules/request/request.js:1161:10)
at Request.emit (events.js:210:5)
at Request.EventEmitter.emit (domain.js:475:20)
at IncomingMessage.<anonymous> (/home/node/.npm-global/lib/node_modules/firebase-tools/node_modules/request/request.js:1083:12)
at Object.onceWrapper (events.js:299:28)
at IncomingMessage.emit (events.js:215:7)
at IncomingMessage.EventEmitter.emit (domain.js:475:20)
at endReadableNT (_stream_readable.js:1184:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
Error: An unexpected error has occurred.
Ini tampaknya terkait dengan https://github.com/firebase/firebase-tools/issues/1970 (yaitu, penghentian titik akhir metadata instance v1beta1
, yang masih digunakan oleh autentikasi gcloud lama perpustakaan yang digunakan oleh Firebase CLI..)
Komentar yang paling membantu
@mbleigh ada pembaruan? mengonfirmasi sampai sekarang firebase CLI tidak dapat menggunakan akun layanan untuk menyebarkan? kami menginginkannya untuk alat CI. jadi dukungan GOOGLE_APPLICATION_CREDENTIALS tidak berfungsi?