Konfigurasikan autentikasi JWT untuk Pemicu HTTP di Function Compute. Hal ini memastikan hanya klien yang memiliki Token Web JSON (JWT) valid yang dapat mengakses layanan HTTP Anda, sehingga meningkatkan keamanan serta mencegah akses tidak sah dan serangan berbahaya.
Informasi latar belakang
Pendahuluan
Function Compute mendukung autentikasi JWT untuk Pemicu HTTP. Token Web JSON (JWT), yang didefinisikan dalam RFC 7519, merupakan skema autentikasi berbasis token. Informasi status pengguna disimpan dalam Token dan disediakan oleh klien. Fungsi tidak menyimpan informasi ini, menjadikan JWT sebagai metode autentikasi yang sesuai dengan arsitektur tanpa server. Function Compute melakukan autentikasi terhadap permintaan pemanggilan HTTP menggunakan kumpulan Kunci Web JSON Publik (JWKS) yang dikaitkan dengan Pemicu HTTP tersebut. Berdasarkan konfigurasi Pemicu HTTP, Function Compute meneruskan claims sebagai parameter ke fungsi. Fungsi tidak perlu melakukan autentikasi permintaan—fungsi hanya fokus pada logika bisnis. Untuk informasi lebih lanjut mengenai proses autentikasi dan konsep dasar Token JWT, lihat Autentikasi Token Berbasis JWT dan Pengantar JWT.
Alur Autentikasi JWT
Gambar di atas menunjukkan diagram urutan seluruh alur bisnis untuk autentikasi JWT menggunakan Pemicu HTTP Function Compute dengan 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 membaca dan memverifikasi informasi autentikasi, seperti username dan password, dari permintaan tersebut. Setelah verifikasi berhasil, layanan tersebut menghasilkan
Tokenstandar menggunakan kunci privat.Layanan otorisasi kustom mengembalikan respons yang berisi
Tokenkepada klien. Klien harus menyimpan cacheTokenini secara lokal.Klien mengirim permintaan bisnis ke Pemicu HTTP, termasuk
Token.Pemicu HTTP memverifikasi
Tokendalam permintaan menggunakan kunci publik yang dikonfigurasi oleh pengguna.Setelah verifikasi berhasil, permintaan diteruskan ke fungsi yang dilindungi.
Fungsi yang dilindungi memproses permintaan bisnis dan mengembalikan respons.
Pemicu HTTP mengembalikan respons bisnis kepada klien.
Prasyarat
Layanan telah dibuat. Untuk informasi lebih lanjut, lihat Membuat Layanan.
Anda telah membuat fungsi HTTP. Untuk langkah-langkah spesifik, lihat Buat Fungsi.
Batasan
Anda dapat menghasilkan dan mendistribusikan JWT dengan metode apa pun. Function Compute melakukan autentikasi JWT menggunakan JWKS publik yang dikonfigurasi pada pemicu.
JWKS tanpa
kiddidukung.Anda dapat membaca token dari
header, parameterQuery(GET), parameter form (POST), dancookie.Anda dapat meneruskan
claimske fungsi sebagaiheader, parameter form (POST), dancookie.Function Compute mendukung konfigurasi satu set Kunci Web JSON (JWKS) untuk Pemicu HTTP. Sistem mencari JWKS untuk menemukan JWK publik yang memiliki
kidyang sama denganToken, lalu menggunakan kunci publik tersebut untuk memverifikasi signatureToken. JWKS pada satu pemicu hanya boleh memiliki paling banyak satu JWK dengankidyang kosong atau tidak ada.Function Compute mendukung algoritma JWT berikut.
Signature Algorithm
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
PentingAlgoritma signature HMAC menggunakan enkripsi simetris, yang memberikan tingkat keamanan lebih rendah. Gunakan algoritma enkripsi asimetris untuk keamanan yang lebih tinggi.
Saat menggunakan algoritma enkripsi asimetris, sertakan hanya informasi kunci publik dalam JWT Anda. Jangan sertakan informasi kunci privat.
Gunakan HTTPS untuk melindungi informasi sensitif, seperti Token, dalam permintaan. Hal ini mencegah kebocoran
Token.
Prosedur
Langkah 1: Konfigurasi Autentikasi JWT
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik nama fungsi yang diinginkan. Pada halaman Detail Fungsi yang muncul, klik tab Trigger Management (URL).
Pada tab Trigger Management (URL), klik tombol Edit di kolom Actions untuk Pemicu HTTP.
Pada panel Edit Trigger, konfigurasikan item berikut, lalu klik OK.
Atur Authentication Method menjadi JWT Authentication.

Konfigurasi JWKS.
Untuk mengonfigurasi autentikasi JWT pada Pemicu HTTP, Anda harus menyediakan JSON Web Key Set (JWKS) yang valid. Anda dapat membuat JWKS sendiri, atau mencari JSON Web Key Generator untuk menemukan tool online, seperti mkjwk.org. Jika Anda memiliki kunci dalam format PEM, gunakan tool seperti jwx untuk mengonversinya ke format JWKS.
Dokumen ini menunjukkan contoh pembuatan JWKS menggunakan mkjwk.org. Seperti ditunjukkan pada gambar berikut, pada antarmuka pembuatan, atur Key Use menjadi Signature, Algorithm menjadi RS256, dan Show X.509 menjadi Yes. Lalu, klik Generate. Gunakan Private Key (① pada gambar) dalam kode Anda untuk menerbitkan Token JWT. Simpan dengan aman. Salin isi Public Key (② pada gambar) ke dalam array keys pada konfigurasi JWKS di konsol.


Contoh berikut menunjukkan JWKS yang dikonfigurasi dalam dokumen ini.
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] }Pada JWT Token Configuration, pilih lokasi
Tokendan namaToken.Lokasi
Tokenmendukung Header, Cookie, parameter Query (GET), dan parameter form (POST). Jika Anda memilih Header sebagai lokasiToken, tentukan Parameter Name dan Prefix to Remove. Function Compute akan menghapus konten awalan yang ditetapkan di Prefix to Remove saat mengambil Token.
PentingSaat mengatur Prefix to Remove, periksa apakah terdapat spasi setelah awalan tersebut. Tambahkan spasi setelah bidang awalan, misalnya
Bearer.Pada konfigurasi JWT Claim Transformation, pilih lokasi parameter, nama parameter asli, dan nama parameter setelah diteruskan ke fungsi.
Lokasi parameter yang dipetakan mendukung Header, Cookie, dan parameter form (POST).

Atur mode pencocokan permintaan.
Match All: Semua permintaan HTTP memerlukan validasi JWT.
Whitelist Mode: Permintaan HTTP dengan path yang ditetapkan dalam Request Path Whitelist tidak memerlukan validasi JWT. Permintaan lainnya memerlukan validasi JWT.
Blacklist Mode: Permintaan HTTP dengan path yang ditetapkan dalam Request Path Blacklist memerlukan validasi JWT. Permintaan lainnya tidak memerlukan validasi JWT.
Whitelist Mode dan Blacklist Mode mendukung dua mode pencocokan berikut.
Pencocokan eksak
Path permintaan harus persis sama dengan path yang dikonfigurasi. Misalnya, jika Anda menetapkan Request Path Blacklist ke /a, permintaan dari path /a memerlukan validasi JWT. Permintaan dari path /a/ tidak memerlukan validasi.
Pencocokan fuzzy
Gunakan karakter wildcard (*) untuk menetapkan path. Karakter wildcard (*) hanya boleh muncul di akhir path. Misalnya, jika Anda menetapkan Request Path Blacklist ke /login/*, permintaan dengan awalan path /login/ (seperti /login/a atau /login/b/c/d) memerlukan validasi JWT.
Langkah 2: Verifikasi Operasi
Menggunakan tool debugging seperti Postman, masukkan endpoint akses dan Token sesuai konfigurasi JWT Pemicu HTTP. Verifikasi bahwa Anda dapat mengakses layanan HTTP tersebut.
Gunakan Private Key berformat X.509 PEM yang dihasilkan pada Langkah 1 sebagai kunci privat 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 contoh Python berikut secara lokal untuk menghasilkan Token JWT.
import jwt import time private_key = """ -----BEGIN PRIVATE KEY----- <Use the X.509 PEM-formatted 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 menjadi 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.
Pada tab Trigger Management (URL) fungsi target, ambil endpoint akses jaringan publik Pemicu HTTP dan masukkan ke dalam bidang URL di Postman.
Pada Headers Postman, konfigurasikan informasi parameter Token, lalu klik Send untuk mengirim permintaan. Contoh berikut menunjukkan Token yang diisi dalam dokumen ini.
Name
Example Value
Description
Key
AuthenticationNama parameter yang ditetapkan di JWT Token Configuration.
Value
Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLQDi JWT Token Configuration, Anda dapat mengonfigurasi sistem untuk menghapus awalan saat membangun token JWT. Misalnya, asumsikan awalan yang dihapus diatur ke
Bearer.PentingPerhatikan bahwa awalan dan spasi parameter JWT dalam header permintaan harus sesuai dengan konten Prefix to Remove yang ditetapkan di JWT Token Configuration. Jika tidak, pemicu gagal mengurai Token dan mengembalikan error "invalid or expired jwt".
Gunakan Autentikasi JWT dengan Nama Domain Kustom
Seperti ditunjukkan pada gambar di atas, nama domain kustom berada sebelum Pemicu HTTP. Permintaan pengguna pertama kali diproses oleh nama domain kustom, lalu oleh Pemicu HTTP. Logika autentikasi JWT berada pada Pemicu HTTP. Bagian berikut menjelaskan cara menggunakan autentikasi JWT dengan nama domain kustom.
Nama Domain Kustom Normal
Jika Anda mengonfigurasi routing untuk nama domain kustom tetapi tidak mengonfigurasi kebijakan rewrite, path dalam permintaan HTTP masuk adalah path permintaan nama domain kustom tersebut.
Asumsikan aturan routing untuk nama domain kustom www.fc-jwt.com adalah sebagai berikut. Pemicu HTTP untuk fungsi jwt-demo telah dikonfigurasi dengan autentikasi JWT, dan Request Path Blacklist diatur ke /fc-jwt/auth/*.
Path | Service Name | Function Name | Version |
/fc-jwt/* | jwt | jwt-demo | 1 |
Jika pengguna meminta URL /fc-jwt/auth/aliyun, Pemicu HTTP memvalidasi permintaan tersebut karena path yang mencapai Pemicu HTTP sesuai dengan Request Path Blacklist yang dikonfigurasi.
Gabungkan dengan Fitur Rewrite Nama Domain Kustom
Jika Anda mengonfigurasi routing untuk nama domain kustom dan kebijakan rewrite, path dalam permintaan HTTP masuk adalah path hasil rewrite dari nama domain kustom tersebut. Untuk informasi lebih lanjut tentang fitur rewrite nama domain kustom, lihat Konfigurasi Kebijakan Rewrite (Pratinjau Publik).
Asumsikan aturan routing untuk nama domain kustom www.fc-jwt.com adalah sebagai berikut. Pemicu HTTP untuk fungsi jwt-demo telah dikonfigurasi dengan autentikasi JWT, dan Request Path Blacklist diatur ke /fc-jwt/auth/*. Kebijakan rewrite wildcard juga dikonfigurasi (aturan pencocokan adalah /fc-jwt/*, aturan penggantian adalah /$1).
Path | Service Name | Function Name | Version |
/fc-jwt/* | jwt | jwt-demo | 1 |
Jika pengguna meminta URL /fc-jwt/auth/aliyun, URL hasil rewrite-nya adalah /auth/aliyun. Untuk informasi lebih lanjut tentang aturan rewrite wildcard, lihat Rewrite Wildcard. Dalam kasus ini, Pemicu HTTP tidak memvalidasi permintaan karena path yang mencapai Pemicu HTTP adalah /auth/aliyun, yang tidak sesuai dengan Request Path Blacklist yang dikonfigurasi.
Jika Anda mengonfigurasi Request Path Blacklist pemicu menjadi /auth/*, Pemicu HTTP akan melakukan validasi JWT untuk permintaan ke URL /fc-jwt/auth/aliyun.