Rumah > Artikel > pembangunan bahagian belakang > Membina Set Tuntutan JWT yang sah
Saya perlu menyemak Permintaan Tarik yang membetulkan isu yang dilaporkan dengan sampel dan semasa ujian sedang berlalu, rasanya mesti ada sesuatu yang lebih berlaku dengan sampel yang perlu diubah.
Saya telah mengetahui tentang Token Web JSON (JWT disebut "jots") untuk sementara waktu, saya tidak mengetahui mereka. Melihat PR ini memberi saya alasan untuk menggali lebih lanjut.
JWT ialah kaedah standard terbuka untuk menghantar maklumat dengan selamat antara pihak. Mereka sering digunakan untuk mengesahkan pengguna dan membenarkan akses kepada sumber. Ia terdiri daripada 3 bahagian, satu tajuk, muatan dan tandatangan.
API Kredensial Akaun Perkhidmatan IAM mencipta bukti kelayakan jangka pendek untuk menyamar sebagai akaun perkhidmatan IAM. SignJwtmethod akan menandatangani JWT menggunakan kunci peribadi terurus sistem akaun perkhidmatan. Dalam badan permintaan kaedah signJwt, medan muatan harus mengandungi objek JSON bersiri yang mengandungi set tuntutan JWT.
Tuntutan ialah maklumat teras yang dihantar oleh JWT.
Berikut ialah contoh set tuntutan yang sah:
{ "iss": "https://cloud.google.com/iam", "sub": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com", "aud": "https://my-iap-protected-app.example.com", "iat": 1694003600, "exp": 1694007200 }
Set tuntutan ini termasuk medan berikut:
Dengan memasukkan tuntutan ini dalam muatan JWT anda, anda boleh memastikan ia sah dan boleh digunakan untuk mengakses sumber yang dilindungi IAP.
Kod asal kelihatan seperti
iat = datetime.datetime.now(tz=datetime.timezone.utc) exp = iat + 3600 return json.dumps( { "iss": service_account_email, "sub": service_account_email, "aud": resource_url, "iat": iat, "exp": exp, } )
Saya tahu ada sesuatu yang sedang berlaku dengan ujian tetapi saya tidak mahu menyekat mendapatkan isu asas dengan kod ini diselesaikan.
Pengarang PR menyerahkan perubahan
iat = datetime.datetime.now(tz=datetime.timezone.utc).timestamp()
Ini nampaknya seperti pembetulan yang tidak lengkap. Berdasarkan dokumentasi untuk API, saya menyedari bahawa pembetulan yang diserahkan masih tidak akan menetapkan iat untuk menaip int dan masih akan gagal. Saya mencadangkan sedikit perubahan yang akan menyelesaikan isu PR tentang
now_utc = datetime.datetime.now(tz=datetime.timezone.utc) iat = int(now_utc.timestamp())
Semakin lama saya memikirkannya, saya menyedari bahawa Datetime tidak berguna untuk sampel ini. Modul Datetime membekalkan kelas untuk memanipulasi tarikh dan masa yang berguna apabila anda mahu tarikh. Kami benar-benar memerlukan integer dalam UTC supaya modul Masa lebih berguna.
Insetad, kita boleh lakukan ini
now = int(time.time()) return json.dumps( { "iss": service_account_email, "sub": service_account_email, "aud": resource_url, "iat": now, "exp": now + 3600, } )
Cari kod lengkap (dikemas kini!) untuk sampel ini di sini.
Atas ialah kandungan terperinci Membina Set Tuntutan JWT yang sah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!