Konfigurasikan autentikasi JSON Web Token (JWT) untuk pemicu HTTP agar hanya klien yang memiliki JWT valid yang dapat mengakses fungsi Anda. Pendekatan ini melindungi layanan HTTP Anda dari akses tidak sah dan serangan berbahaya.
Latar Belakang
Ikhtisar
Function Compute mendukung autentikasi JWT untuk pemicu HTTP. JWT (JSON Web Token, RFC7519) adalah skema autentikasi berbasis token yang praktis. Informasi status pengguna disimpan dalam Token, yang disediakan oleh klien. Fungsi (server) tidak perlu menyimpan informasi ini, sehingga metode ini ramah terhadap arsitektur Serverless. Function Compute dapat mengautentikasi JWT dalam permintaan HTTP dengan menggunakan JWKS publik yang Anda bind ke pemicu HTTP. Berdasarkan konfigurasi pemicu HTTP, claims dapat diteruskan ke fungsi sebagai parameter. Hal ini memungkinkan fungsi fokus pada logika bisnis alih-alih melakukan proses autentikasi. Untuk mempelajari lebih lanjut tentang proses autentikasi Token JWT dan konsep dasarnya, lihat Autentikasi token berbasis JWT dan Pengenalan JWT.
Alur autentikasi JWT
Diagram di atas menggambarkan proses autentikasi JWT untuk pemicu HTTP yang menggunakan algoritma enkripsi asimetris:
Klien mengirim permintaan autentikasi ke layanan autentikasi kustom. Permintaan tersebut biasanya mencakup username dan password pengguna akhir.
Layanan autentikasi kustom memverifikasi kredensial dalam permintaan, seperti username dan password. Setelah verifikasi berhasil, layanan tersebut menggunakan kunci privat untuk menghasilkan token standar.
Layanan autentikasi kustom mengembalikan token tersebut ke klien dalam tanggapan. Klien menyimpan
tokenini secara lokal di cache.Klien mengirim permintaan bisnis yang menyertakan token tersebut ke pemicu HTTP.
Pemicu HTTP menggunakan kunci publik yang dikonfigurasi untuk memverifikasi token dalam permintaan.
Setelah verifikasi berhasil, pemicu meneruskan permintaan ke fungsi yang dilindungi.
Fungsi yang dilindungi memproses permintaan bisnis dan mengembalikan tanggapan.
Pemicu HTTP mengembalikan tanggapan bisnis ke klien.
Prasyarat
Fungsi dan pemicu HTTP telah dibuat. Untuk informasi selengkapnya, lihat Buat fungsi dan Buat pemicu.
Batasan
Anda dapat menghasilkan dan mendistribusikan JWT dengan cara apa pun. Function Compute mengautentikasi JWT menggunakan JWKS publik yang dikonfigurasi untuk pemicu.
Function Compute mendukung JWK tanpa key ID (
kid).Pemicu dapat membaca token dari
header, parameterQuery(GET), parameter form (POST), ataucookie.Anda dapat meneruskan
claimske fungsi sebagaiheader, parameter form (POST), ataucookie.Function Compute memungkinkan Anda mengonfigurasi JWKS untuk pemicu HTTP. Sistem mencari JWKS untuk menemukan JWK publik dengan key ID (
kid) yang sesuai dengankiddalamtoken. Pemicu kemudian menggunakan kunci ini untuk memverifikasi signature token tersebut. JWKS pemicu dapat berisi paling banyak satu JWK yang tidak memilikikidatau memiliki string kosong sebagaikid.Function Compute JWT mendukung algoritma berikut.
Algoritma signature
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 dan kurang aman. Kami menyarankan menggunakan algoritma enkripsi asimetris yang lebih aman.
Saat menggunakan algoritma enkripsi asimetris, pastikan JWKS Anda hanya berisi informasi kunci publik demi keamanan. Jangan sertakan detail kunci privat.
Kami menyarankan menggunakan HTTPS untuk melindungi informasi sensitif dalam permintaan, seperti
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 target.
Di halaman detail fungsi, klik tab Trigger. Temukan pemicu HTTP dan klik Modify di kolom Modify.
Di panel Modify Trigger, konfigurasikan parameter berikut lalu klik OK.
Untuk Authentication Method, pilih JWT Authentication.
Konfigurasikan JWKS.
Untuk mengonfigurasi autentikasi JWT untuk pemicu HTTP, berikan JWKS yang valid. Anda dapat menghasilkan JWKS sendiri atau menggunakan tool online dengan mencari JSON Web Key Generator. Misalnya, Anda dapat menggunakan mkjwk.org. Jika Anda memiliki kunci dalam format PEM, Anda dapat menggunakan tool seperti jwx untuk mengonversinya ke format JWKS.
Dokumen ini menggunakan mkjwk.org untuk menunjukkan cara menghasilkan JWKS. Seperti yang ditampilkan pada gambar berikut, di halaman pembuatan kunci, atur Key Use ke Signature, Algorithm ke RS256, dan Show X.509 ke Yes, lalu klik Generate. Gunakan Private Key (① pada gambar) dalam kode Anda untuk menerbitkan token JWT dan simpan dengan aman. Salin Public Key (② pada gambar) dan tempelkan ke dalam array keys konfigurasi JWKS di Konsol.


Contoh berikut menunjukkan konfigurasi JWKS:
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] }Di bagian JWT Token Configuration, pilih lokasi
tokendan tentukan namatoken.Lokasi
Tokenmendukung Header, Cookie, parameter Query (GET), dan parameter Form (POST). Jika Anda memilih Header sebagai lokasiToken, Anda juga harus menentukan Parameter Name dan Remove Prefix. Saat Function Compute mengambil token, awalan yang ditentukan di Remove Prefix akan dihapus.
Di bagian JWT Claim Conversion, tentukan tujuan claim, nama claim asli, dan nama parameter baru yang akan diteruskan ke fungsi.
Lokasi parameter pemetaan dapat berupa Header, Cookie, atau parameter Form (POST).

Tentukan mode pencocokan permintaan.
Match All: Semua permintaan HTTP memerlukan validasi JWT.
Whitelist Mode: Permintaan untuk path dalam Whitelist of Request Paths melewati validasi JWT. Semua permintaan lainnya memerlukannya.
Blacklist Mode: Hanya permintaan untuk path dalam Blacklist of Request Paths yang memerlukan validasi JWT. Semua permintaan lainnya melewatinya.
Whitelist Mode dan Blacklist Mode mendukung dua mode pencocokan berikut:
Pencocokan eksak
Path permintaan harus persis sama dengan path yang ditentukan. Misalnya, jika Anda mengatur Blacklist of Request Paths ke /a, permintaan ke path /a memerlukan validasi JWT, tetapi permintaan ke path /a/ tidak.
Pencocokan fuzzy
Anda dapat menggunakan karakter wildcard (*) di akhir path. Misalnya, jika Anda mengatur Blacklist of Request Paths ke /login/*, semua permintaan ke path yang dimulai dengan /login/ (seperti /login/a dan /login/b/c/d) memerlukan validasi JWT.
Langkah 2: Verifikasi konfigurasi
Gunakan tool pengujian, seperti Postman, untuk memverifikasi bahwa Anda dapat mengakses layanan HTTP. Konfigurasikan alamat akses, token, dan informasi lainnya berdasarkan konfigurasi JWT pemicu HTTP.
Gunakan kunci privat dalam format X.509 PEM yang Anda hasilkan di Langkah 1: Konfigurasikan autentikasi JWT untuk menerbitkan token JWT. Langkah-langkah berikut menggunakan Python sebagai contoh untuk menunjukkan cara menghasilkan token dengan menggunakan skrip lokal.
Instal modul PyJWT.
pip install 'PyJWT>=2.0'Jalankan skrip Python berikut secara lokal untuk menghasilkan token JWT.
import jwt import time private_key = """ -----BEGIN PRIVATE KEY----- <The private key in X.509 PEM format that you generated in Step 1> -----END PRIVATE KEY----- """ headers = { "alg": "RS256", "typ": "JWT" } payload = { "sub": "1234567890", "name": "John Snow", "iat": int(time.time()), # Waktu saat token diterbitkan. "exp": int(time.time()) + 60 * 60, # Atur masa berlaku token selama satu jam. } encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers) print("Generated token: %s" % encoded)
Gunakan Postman untuk memverifikasi akses ke layanan HTTP.
Di tab Trigger pada halaman detail fungsi, dapatkan alamat akses publik pemicu HTTP dan tempelkan ke field URL di Postman.
Di tab Headers di Postman, konfigurasikan parameter token lalu klik Send. Contoh berikut menunjukkan konfigurasi token.
Parameter
Nilai
Deskripsi
Key
AuthenticationNama parameter yang dikonfigurasi di JWT Token Configuration.
Value
Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLgAwalan yang ditentukan di JWT Token Configuration, diikuti oleh token JWT. Nilai contoh mengasumsikan bahwa awalan diatur ke
Bearer.PentingNilai token dalam header permintaan harus diawali dengan awalan dan spasi persis seperti yang Anda konfigurasi untuk Remove Prefix di bagian JWT Token Configuration. Jika tidak, pemicu gagal mengurai token dan mengembalikan error
invalid or expired jwt.