Di Function Compute, Anda dapat mengonfigurasi autentikasi JSON Web Token (JWT) untuk pemicu HTTP. Konfigurasi ini memastikan bahwa hanya klien dengan JWT yang valid yang dapat mengakses fungsi Anda, sehingga meningkatkan keamanan layanan HTTP serta membantu mencegah akses tidak sah dan serangan berbahaya.
Informasi latar belakang
Ikhtisar
Function Compute memungkinkan Anda mengaktifkan autentikasi JWT untuk pemicu HTTP. JWT, yang didefinisikan dalam RFC 7519, merupakan metode berbasis token untuk mengotentikasi permintaan. Informasi status pengguna disimpan dalam token yang disediakan oleh klien, sehingga fungsi (server) tidak perlu menyimpan informasi tersebut. Hal ini menjadikannya metode autentikasi yang ramah arsitektur tanpa server. Function Compute menggunakan kumpulan Kunci Web JSON Publik (JWKS) yang Anda konfigurasikan untuk pemicu HTTP guna melakukan autentikasi JWT terhadap permintaan HTTP. Berdasarkan konfigurasi pemicu, Function Compute dapat meneruskan claims sebagai parameter ke fungsi. Dengan demikian, fungsi Anda dapat fokus pada logika bisnis alih-alih mengotentikasi permintaan. Untuk mempelajari lebih lanjut tentang proses dan dasar-dasar autentikasi token JWT, lihat Autentikasi token berbasis JWT dan Pengantar JWT.
Cara kerja autentikasi JWT
Gambar di atas menunjukkan urutan alur kerja autentikasi JWT untuk pemicu HTTP di Function Compute yang menggunakan algoritma enkripsi asimetris. Langkah-langkahnya adalah sebagai berikut:
-
Klien mengirim permintaan autentikasi ke layanan otorisasi kustom. Permintaan ini biasanya mencakup username dan password pengguna akhir.
-
Layanan otorisasi kustom memvalidasi kredensial dalam permintaan, seperti username dan password. Setelah validasi berhasil, layanan tersebut menggunakan kunci privat untuk menghasilkan token standar.
-
Layanan otorisasi kustom mengirim respons yang berisi token kembali ke klien. Klien harus menyimpan
tokenini secara lokal di cache. -
Klien mengirim permintaan bisnis yang menyertakan token ke pemicu HTTP.
-
Pemicu HTTP menggunakan kunci publik yang dikonfigurasi untuk memverifikasi token dalam permintaan.
-
Setelah token diverifikasi, pemicu meneruskan permintaan ke fungsi yang dilindungi.
-
Fungsi yang dilindungi memproses permintaan bisnis dan mengembalikan respons.
-
Pemicu HTTP meneruskan respons bisnis ke klien.
Prasyarat
Buat fungsi dan pemicu HTTP. Untuk informasi selengkapnya, lihat Buat fungsi dan Buat pemicu.
Batasan
-
Anda dapat menggunakan metode apa pun untuk menghasilkan dan mendistribusikan JWT. Function Compute mengotentikasi JWT menggunakan JWKS publik yang dikonfigurasi untuk pemicu.
-
Function Compute mendukung Kunci Web JSON (JWK) tanpa
kid(key ID). -
Pemicu dapat membaca token dari
headerpermintaan, parameterQuery(untuk permintaan GET), parameter form (untuk permintaan POST), ataucookie. -
Anda dapat meneruskan
claimske fungsi sebagaiheader, parameter form (untuk permintaan POST), ataucookie. -
Function Compute memungkinkan Anda mengonfigurasi JWKS untuk pemicu HTTP. Sistem mencari JWKS untuk menemukan JWK publik dengan
kidyang sesuai dengan yang ada ditoken. Sistem kemudian menggunakan kunci publik ini untuk memverifikasi signaturetoken. JWKS untuk pemicu dapat memiliki paling banyak satu JWK di manakidtidak ada atau berupa string kosong.Function Compute JWT mendukung algoritma berikut.
Algoritma Tanda Tangan
Nilai Alg
RSASSA-PKCS1-V1_5
RS256, RS384, RS512
RSASSA-PSS
PS256, PS384, PS512
Elliptic Curve (ECDSA)
ES256, ES384, ES512
HMAC
HS256, HS384, HS512
EdDSA
EdDSA
Penting-
Algoritma signature HMAC menggunakan enkripsi simetris dan kurang aman. Kami menyarankan Anda menggunakan algoritma enkripsi asimetris yang lebih aman.
-
Saat menggunakan algoritma enkripsi asimetris, demi keamanan, JWT Anda sebaiknya hanya berisi informasi kunci publik. Kami menyarankan agar Anda tidak menyertakan informasi kunci privat.
-
Kami menyarankan Anda menggunakan HTTPS untuk melindungi informasi sensitif seperti
tokendalam permintaan guna mencegah kebocoran token.
-
Prosedur
Langkah 1: Konfigurasikan autentikasi JWT
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.
-
Di halaman detail fungsi, klik tab Trigger. Temukan pemicu HTTP dan klik Modify di kolom Actions.
-
Di panel Edit Trigger, konfigurasikan parameter berikut lalu klik OK.
-
Untuk Authentication Method, pilih JWT Authentication.
-
Konfigurasikan JWKS.
Untuk mengonfigurasi autentikasi JWT untuk pemicu HTTP, Anda harus menyediakan JWKS yang valid. Anda dapat menghasilkan JWKS sendiri atau menggunakan alat daring dengan mencari JSON Web Key Generator, seperti mkjwk.org. Jika Anda memiliki kunci dalam format PEM, Anda dapat menggunakan alat seperti jwx untuk mengonversinya ke format JWKS.
Topik ini menggunakan mkjwk.org untuk menghasilkan JWKS sebagai contoh. Seperti yang ditunjukkan pada gambar berikut, atur Key Use ke Signature, Algorithm ke RS256, dan Show X.509 ke Yes, lalu klik Generate. Anda harus menggunakan Private Key (① pada gambar) dalam kode Anda untuk menerbitkan token JWT, jadi simpanlah dengan aman. Anda dapat menyalin konten Public Key (② pada gambar) dan menempelkannya ke dalam array keys konfigurasi JWKS di konsol.


Kode berikut memberikan contoh konfigurasi JWKS.
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] } -
Di bagian JWT Token Configuration, tentukan lokasi
Tokendan namaToken.Lokasi
Tokenmendukung Header, Cookie, parameter kueri (GET), dan parameter form (POST). Jika lokasiTokendiatur ke Header, Anda juga harus menentukan Parameter Name dan Remove Prefix. Function Compute menghapus awalan yang ditentukan di Remove Prefix saat memperoleh token.
-
Di bagian JWT Claim Conversion, tentukan lokasi penerusan parameter, nama parameter asli, dan nama parameter baru untuk fungsi.
Anda dapat memetakan claims ke Header, Cookie, atau parameter Form (POST).

-
Tetapkan mode pencocokan permintaan.
-
Match All: Semua permintaan HTTP memerlukan autentikasi JWT.
-
Whitelist Mode: Permintaan HTTP untuk path yang ditentukan dalam Whitelist of Request Paths tidak memerlukan autentikasi JWT. Semua permintaan lainnya memerlukan autentikasi JWT.
-
Blacklist Mode: Permintaan HTTP untuk path yang ditentukan dalam Blacklist of Request Paths memerlukan autentikasi JWT. Semua permintaan lainnya tidak memerlukan autentikasi JWT.
Whitelist Mode dan Blacklist Mode mendukung dua jenis pencocokan berikut:
-
Pencocokan eksak
Path permintaan hanya cocok jika persis sama dengan path yang dikonfigurasi. Misalnya, jika Anda mengatur Blacklist of Request Paths ke /a, permintaan ke /a memerlukan autentikasi JWT, tetapi permintaan ke /a/ tidak.
-
Pencocokan fuzzy
Anda dapat menggunakan wildcard (*) dalam path, tetapi wildcard (*) harus berada di akhir path. Misalnya, jika Anda mengatur Blacklist of Request Paths ke /login/*, semua permintaan ke path dengan awalan /login/, seperti /login/a dan /login/b/c/d, memerlukan autentikasi JWT.
-
-
Langkah 2: Verifikasi konfigurasi
Gunakan alat pengujian, seperti Postman, untuk memverifikasi bahwa Anda dapat mengakses layanan HTTP sesuai harapan berdasarkan konfigurasi JWT pemicu HTTP dengan menyediakan titik akhir, token, dan informasi lainnya.
-
Gunakan kunci privat dalam format X.509 PEM yang Anda hasilkan di Langkah 1 untuk menerbitkan token JWT. Langkah-langkah berikut menunjukkan cara menghasilkan token menggunakan skrip Python lokal.
-
Instal modul PyJWT.
pip install 'PyJWT>=2.0' -
Jalankan skrip Python contoh berikut secara lokal untuk menghasilkan token JWT.
import jwt import time private_key = """ -----BEGIN PRIVATE KEY----- <The X.509 PEM-format private key generated in Step 1> -----END PRIVATE KEY----- """ headers = { "alg": "RS256", "typ": "JWT" } payload = { "sub": "1234567890", "name": "John Snow", "iat": int(time.time()), # Waktu penerbitan token. "exp": int(time.time()) + 60 * 60, # Atur masa berlaku token selama 1 jam. } encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers) print("Generated token: %s" % encoded)
-
-
Gunakan Postman untuk memverifikasi bahwa layanan HTTP dapat diakses.
-
Di tab Trigger pada halaman detail fungsi, peroleh titik akhir publik pemicu HTTP dan masukkan ke dalam bidang URL di Postman.
-
Di Postman, konfigurasikan parameter token di header lalu klik Send. Tabel berikut memberikan contoh konfigurasi token.
Parameter
Nilai
Deskripsi
Key
AuthenticationNama parameter yang Anda tentukan di bagian JWT Token Configuration.
Value
Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLgNilai parameter Remove Prefix yang Anda tentukan di bagian JWT Token Configuration, digabungkan dengan token JWT. Nilai contoh mengasumsikan bahwa Remove Prefix diatur ke
Bearer.PentingAwalan dan spasi untuk parameter JWT di header permintaan harus persis sama dengan nilai Remove Prefix yang Anda tentukan di bagian JWT Token Configuration. Jika tidak, Pemicu akan gagal mengurai token dan mengembalikan galat
invalid or expired jwt.
-