JSON Web Token (JWT) adalah metode berbasis token yang mudah digunakan untuk mengautentikasi permintaan. Autentikasi JWT menggunakan token yang disediakan oleh client untuk menyimpan informasi status pengguna, sehingga fungsi tidak perlu menyimpan informasi tersebut. Hal ini menjadikan autentikasi JWT sebagai metode ideal untuk aplikasi serverless. Function Compute menerapkan autentikasi JWT terhadap permintaan yang dikirim ke nama domain kustom dengan menggunakan JSON Web Key Set (JWKS) publik yang diikat ke nama domain tersebut. Function Compute juga meneruskan claims ke fungsi sesuai konfigurasi nama domain kustom, sehingga Anda dapat fokus sepenuhnya pada logika bisnis tanpa perlu menangani autentikasi dalam fungsi.
Latar belakang
Ikhtisar
JWT adalah metode berbasis token yang mudah digunakan untuk mengautentikasi permintaan. Untuk informasi selengkapnya, lihat RFC 7519. Autentikasi JWT menggunakan tokens yang disediakan oleh client untuk menyimpan informasi status pengguna, sehingga fungsi tidak perlu menyimpan informasi tersebut. Hal ini menjadikan autentikasi JWT sebagai metode ideal untuk aplikasi serverless. Function Compute menerapkan autentikasi JWT terhadap permintaan yang dikirim ke nama domain kustom dengan menggunakan JWKS publik yang diikat ke nama domain tersebut. Function Compute juga meneruskan claims ke fungsi sesuai konfigurasi nama domain kustom, sehingga Anda dapat fokus sepenuhnya pada logika bisnis tanpa perlu menangani autentikasi dalam fungsi. Untuk informasi mengenai proses autentikasi dan dasar-dasar tokens JWT, lihat Autentikasi token berbasis JWT dan Pengantar JSON Web Tokens.
Proses autentikasi JWT
Proses autentikasi JWT untuk nama domain kustom sama dengan proses autentikasi JWT untuk HTTP triggers.
Gambar di atas menunjukkan proses autentikasi JWT untuk HTTP triggers di Function Compute, yang menggunakan algoritma enkripsi asimetris. Berikut penjelasan rinci proses tersebut:
Client mengirim permintaan autentikasi ke custom authorizer, biasanya berisi username dan password pengguna.
Custom authorizer membaca dan memverifikasi informasi autentikasi, seperti username dan password, dalam permintaan tersebut. Setelah permintaan lolos verifikasi, authorizer menggunakan kunci privat untuk menghasilkan
tokenstandar.Custom authorizer mengirim respons yang berisi
tokenke client. Client menyimpan cachetokentersebut di mesin lokal.Client mengirim permintaan bisnis yang berisi
tokenke HTTP trigger.HTTP trigger menggunakan kunci publik yang dikonfigurasi untuk memverifikasi
tokendalam permintaan tersebut.Setelah verifikasi berhasil, permintaan diteruskan ke fungsi yang dilindungi.
Fungsi yang dilindungi memproses dan merespons permintaan tersebut.
HTTP trigger meneruskan respons bisnis ke client.
Batasan
Anda dapat menghasilkan dan mendistribusikan JWT sesuai kebutuhan bisnis Anda. Function Compute mengautentikasi JWT tersebut dengan menggunakan JWKS publik yang dikonfigurasi untuk suatu trigger.
JSON Web Keys (JWKs) yang tidak berisi key ID (
kid) didukung.Anda dapat mengonfigurasi beberapa JWK untuk satu trigger.
Anda dapat membaca token dari parameter
header,Query, form, dancookie.Anda dapat meneruskan
claimssebagai parameterheader,Query, form, dancookieke fungsi.Function Compute memungkinkan Anda mengonfigurasi JWKS untuk nama domain kustom. Setelah Anda mengonfigurasi JWKS untuk nama domain kustom, Function Compute mencari kunci publik JWK yang memiliki key ID yang sama dengan token, lalu menggunakan kunci publik tersebut untuk melakukan verifikasi signature terhadap token. Anda boleh tidak menentukan atau mengatur key ID salah satu JWK menjadi string kosong dalam JWKS nama domain kustom.
Tabel berikut menjelaskan algoritma signature yang didukung oleh JWT di Function Compute.
Algoritma signature
Nilai alg
RSASSA-PKCS1-V1_5
RS256, RS384, atau RS512
RSASSA-PSS
PS256, PS384, atau PS512
Elliptic Curve (ECDSA)
ES256, ES384, atau ES512
HMAC
HS256, HS384, atau HS512
EdDSA
EdDSA
Algoritma signature hash-based message authentication code (HMAC) menggunakan enkripsi simetris. Dibandingkan dengan enkripsi asimetris, enkripsi simetris kurang aman. Kami menyarankan Anda menggunakan algoritma enkripsi asimetris untuk meningkatkan keamanan.
Saat menggunakan algoritma enkripsi asimetris, Anda hanya perlu menyertakan informasi kunci publik dalam JWT Anda demi keamanan.
Kami menyarankan Anda menggunakan HTTPS untuk melindungi informasi sensitif seperti
tokensdalam permintaan guna mencegah kebocoran token.
Konfigurasikan autentikasi JWT
Prasyarat
Nama domain kustom telah dibuat. Untuk informasi selengkapnya, lihat Konfigurasikan nama domain kustom.
Prosedur
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah tempat nama domain kustom yang ingin Anda kelola berada. Pada halaman Custom Domains, klik nama domain kustom yang ingin Anda kelola.
Di pojok kanan atas halaman yang muncul, klik Modify. Pada halaman Modify Custom Domain Name, konfigurasikan item berikut dan klik Save.
Atur Authentication Method menjadi JWT Authentication.

Konfigurasikan JWKS.
Untuk mengonfigurasi autentikasi JWT untuk nama domain kustom, diperlukan JWKS yang valid. Anda dapat membuat JWKS sendiri atau menggunakan generator online seperti mkjwk.org. Jika Anda memiliki kunci privat dalam format PEM, Anda dapat menggunakan tool seperti jwx untuk mengonversinya ke format JWKS.
Pada contoh berikut, mkjwk.org digunakan untuk menghasilkan JWKS. Langkah-langkah berikut dilakukan: Konfigurasikan parameter Key Use, Algorithm, dan Show X.509, lalu klik Generate. Anda harus menerbitkan token JWT dalam kode Anda menggunakan kunci privat (① pada gambar berikut). Simpan kerahasiaan kunci privat tersebut. Anda dapat menyalin kunci publik (② pada gambar berikut) dan memasukkannya ke dalam array keys JWKS di Konsol Function Compute.


Kode contoh berikut menunjukkan JWKS yang telah dikonfigurasi:
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] }Konfigurasikan token JWT.
Pilih posisi pembacaan dan nama token. Anda dapat mengatur parameter Read Position ke Header, Cookie, Query Parameters, atau Form Parameters. Jika Anda mengatur parameter Read Position ke Header, Anda harus menentukan awalan untuk header tersebut. Saat Function Compute mengambil token, awalan tersebut akan dihapus.

Konfigurasikan konversi claim JWT.
Pada bagian JWT Claim Conversion, pilih posisi untuk meneruskan parameter ke fungsi, nama asli parameter, dan nama baru parameter setelah diteruskan ke fungsi. Anda dapat mengatur Mapping Parameter Position ke Header, Cookie, Query Parameters, atau Form Parameters.

Verifikasi hasil
Masukkan nama domain kustom dan token ke dalam tool pengujian sesuai konfigurasi JWT nama domain kustom untuk memeriksa apakah domain tersebut dapat digunakan untuk mengakses fungsi. Pada topik ini, digunakan Postman.
Gunakan kunci privat (format X.509 PEM) yang dihasilkan pada langkah sebelumnya (Konfigurasikan autentikasi JWT) untuk membuat token JWT.
Instal modul PyJWT. Untuk informasi selengkapnya, lihat PyJWT.
Jalankan skrip Python contoh berikut secara lokal untuk menghasilkan token JWT. Untuk informasi selengkapnya, lihat PyJWT.
import time private_key = """ -----BEGIN PRIVATE KEY----- <Gunakan kunci privat dalam format X.509 PEM yang dihasilkan saat Anda mengonfigurasi autentikasi JWT> -----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 memeriksa apakah nama domain kustom dapat digunakan untuk mengakses fungsi.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih . Pada halaman Custom Domains, temukan nama domain kustom yang ingin Anda kelola. Salin nama domain tersebut dan tempelkan ke kolom URL di Postman.
Konfigurasikan parameter token di header Postman. Contoh:
Parameter
Nilai
Deskripsi
Key
AuthenticationNama parameter yang Anda konfigurasi di bagian JWT Token Configuration.
Value
Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLgToken bearer yang Anda tentukan untuk parameter Remove Prefix di bagian JWT Token Configuration dan token JWT yang dihasilkan pada langkah sebelumnya.
PentingPastikan format JWT dalam header permintaan sesuai dengan pengaturan Remove Prefix yang dikonfigurasi di bagian JWT Token Configuration. Jika tidak sesuai, pesan error "invalid or expired jwt" akan dikembalikan saat trigger mencoba mengurai token tersebut.
Klik Send untuk melihat informasi yang dikembalikan.

nametofunctionadalah nama parameter setelah claim diteruskan ke fungsi.