Anda dapat mengonfigurasi otentikasi JSON Web Token (JWT) untuk pemicu HTTP di Function Compute. Dengan cara ini, hanya klien dengan token yang valid yang diizinkan untuk mengakses pemicu, sehingga meningkatkan keamanan HTTP dengan memblokir akses yang tidak sah atau berbahaya.
Latar Belakang
Ikhtisar
Function Compute memungkinkan Anda mengaktifkan otentikasi JWT untuk pemicu HTTP. JWT (RFC 7519) adalah metode berbasis token yang mudah digunakan untuk mengotentikasi permintaan. Informasi status pengguna disimpan dalam token yang diberikan oleh klien. Fungsi atau server tidak menyimpan token, sehingga metode ini sangat cocok untuk aplikasi tanpa server. Function Compute dapat menggunakan JSON Web Key Set (JWKS) publik yang dikonfigurasi untuk pemicu HTTP guna melakukan otentikasi JWT pada permintaan HTTP. Function Compute meneruskan klaim sebagai parameter ke fungsi berdasarkan konfigurasi pemicu HTTP. Dengan demikian, otentikasi permintaan tidak diperlukan dalam fungsi, dan Anda dapat fokus pada logika bisnis. Untuk informasi lebih lanjut tentang proses otentikasi dan informasi dasar tentang token dalam JWT, lihat Otentikasi Berbasis JWT dan Pengenalan JSON Web Tokens.
Proses otentikasi JWT
Gambar sebelumnya menunjukkan alur kerja otentikasi JWT untuk pemicu HTTP di Function Compute. Dalam proses ini, algoritma enkripsi asimetris digunakan. Item berikut menjelaskan detail proses:
Klien mengirimkan permintaan otentikasi ke layanan otentikasi kustom. Dalam banyak kasus, nama pengguna dan kata sandi pengguna klien ditentukan dalam permintaan.
Layanan otentikasi kustom membaca dan memverifikasi informasi otentikasi, seperti nama pengguna dan kata sandi, dalam permintaan. Setelah permintaan lulus verifikasi, layanan otentikasi menggunakan kunci privat untuk menghasilkan
tokenstandar.Layanan otentikasi kustom meneruskan respons yang berisi
tokenke klien. Klien menyimpantokenke mesin lokal.Klien mengirimkan permintaan bisnis yang berisi
tokenke pemicu HTTP.Pemicu HTTP menggunakan kunci publik yang dikonfigurasi untuk memverifikasi
tokendalam permintaan.Setelah verifikasi berhasil, permintaan diteruskan ke fungsi yang dilindungi.
Fungsi yang dilindungi memproses dan mengembalikan respons.
Pemicu HTTP meneruskan respons bisnis ke klien.
Sebelum Anda mulai
Buat layanan. Untuk informasi lebih lanjut, lihat Buat Layanan.
Buat fungsi HTTP. Untuk informasi lebih lanjut, lihat Buat Fungsi.
Batasan
Anda dapat menghasilkan dan mendistribusikan JWT berdasarkan kebutuhan bisnis Anda. Function Compute mengotentikasi JWT menggunakan JWKS publik yang dikonfigurasi untuk pemicu.
JSON Web Key (JWK) yang tidak memiliki
kid(ID kunci) didukung.Token dapat dibaca dari
header, parameterquery(dengan menggunakan metode GET), parameter formulir (dengan menggunakan metode POST), ataucookie.Anda dapat meneruskan
klaimsebagaiheader, parameterquery(dengan menggunakan metode GET), parameter formulir (dengan menggunakan metode POST), dancookieke fungsi.Anda dapat mengonfigurasi JWKS untuk pemicu HTTP. Setelah JWKS dikonfigurasi, sistem mencari JWKS untuk JWK publik yang memiliki
kidyang sama dengan kid dalamtokendan menggunakan JWK publik untuk memverifikasi tanda tangantoken. JWKS pemicu diizinkan memiliki maksimal satu JWK yangkid-nya tidak ada atau diatur ke string kosong.Tabel berikut mencantumkan algoritma yang didukung oleh JWT Function Compute.
Algoritma tanda tangan
alg nilai
RSASSA-PKCS1-V1_5
RS256, RS384, atau RS512
RSASSA-PSS
PS256, PS384, atau PS512
Kurva Elips (ECDSA)
ES256, ES384, atau ES512
HMAC
HS256, HS384, atau HS512
EdDSA
EdDSA
PentingAlgoritma kode otentikasi pesan berbasis hash (HMAC) menggunakan enkripsi simetris, yang memberikan keamanan lemah. Kami merekomendasikan Anda menggunakan algoritma enkripsi asimetris untuk keamanan yang lebih baik.
Jika Anda menggunakan algoritma enkripsi asimetris, Anda perlu memasukkan informasi hanya tentang kunci publik, bukan kunci privat dalam JWT Anda, demi keamanan.
Kami merekomendasikan Anda menggunakan HTTPS untuk melindungi informasi sensitif seperti
tokendalam permintaan untuk mencegah kebocoran token.
Prosedur
Langkah 1: Konfigurasikan otentikasi JWT
Masuk ke Konsol Function Compute. Di bilah navigasi sisi 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 Modify di kolom Actions pemicu HTTP.
Di panel Ubah Pemicu, konfigurasikan parameter berikut dan klik OK.
Atur Authentication Method ke JWT Authentication.

Konfigurasikan JWKS.
Untuk mengonfigurasi otentikasi JWT untuk pemicu HTTP, Anda harus menyediakan JWKS yang valid. Anda dapat secara manual menghasilkan JWKS, atau cari dengan JSON Web Key generator di browser web untuk menggunakan generator online, seperti mkjwk.org. Jika Anda memiliki kunci dalam format Privacy Enhanced Mail (PEM), Anda dapat menggunakan alat seperti jwx untuk mengonversi kunci ke format JWKS.
Dalam contoh ini, mkjwk.org digunakan untuk menghasilkan JWKS. Pada halaman untuk menghasilkan JWKS, atur Show X.509 ke Yes untuk melihat kunci privat. Anda perlu menggunakan kunci privat untuk menerbitkan JWT. Simpan kunci privat dengan aman. Anda dapat menyalin konten kunci publik ke array keys JWKS di Konsol Function Compute. Gambar berikut menunjukkan detailnya.

Kode contoh:
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] }Di bagian JWT Token Configuration, pilih posisi dan nama
token.Anda dapat mengatur parameter Posisi Baca
tokenke Header, Cookie, Parameter Query, atau Parameter Formulir. Jika Anda mengatur parameter Posisi Bacatokenke Header, Anda harus menentukan parameter Parameter Name dan Remove Prefix. Saat Function Compute mendapatkan token, awalan yang ditentukan oleh parameter Remove Prefix dihapus.
PentingSaat Anda mengonfigurasi parameter Remove Prefix, periksa apakah ada spasi setelah awalan. Kami merekomendasikan Anda menambahkan spasi setelah awalan yang ditentukan, misalnya,
Bearer.Di bagian JWT Claim Conversion, pilih posisi untuk meneruskan parameter ke fungsi, nama asli parameter, dan nama baru parameter setelah parameter diteruskan ke fungsi.
Anda dapat mengatur parameter Posisi Parameter Pemetaan ke Header, Cookie, Parameter Query, atau Parameter Formulir.

Tentukan mode pencocokan permintaan.
Match All: Semua permintaan HTTP harus diverifikasi menggunakan JWT.
Whitelist Mode: Permintaan HTTP yang dikirim dari jalur yang ditentukan dalam Whitelist of Request Paths tidak diautentikasi menggunakan JWT. Permintaan lain diautentikasi menggunakan JWT.
Blacklist Mode: Permintaan HTTP yang dikirim dari jalur yang ditentukan dalam Blacklist of Request Paths diautentikasi menggunakan JWT. Permintaan lain tidak diautentikasi menggunakan JWT.
Whitelist Mode dan Blacklist Mode mendukung mode pencocokan berikut:
Pencocokan tepat
Jalur hanya cocok jika persis sama dengan jalur yang ditentukan. Misalnya, jika Anda mengatur Blacklist of Request Paths ke /a, otentikasi JWT diperlukan untuk permintaan yang dikirim dari /a. Otentikasi JWT tidak diperlukan untuk permintaan yang dikirim dari /a/.
Pencocokan kabur
Anda dapat mengatur nilainya ke jalur yang diakhiri dengan asterisk (*) sebagai wildcard. Misalnya, jika Anda mengatur parameter Blacklist of Request Paths ke /login/*, otentikasi JWT diperlukan untuk permintaan yang dikirim dari jalur dengan awalan /login/, seperti /login/a dan /login/b/c/d.
Langkah 2: Verifikasi konfigurasi JWT pemicu HTTP
Bagian ini menjelaskan cara memverifikasi apakah layanan HTTP dapat diakses sesuai harapan dengan menggunakan alat berdasarkan konfigurasi JWT pemicu HTTP Anda. Dalam bagian ini, Postman digunakan.
Gunakan kunci privat dalam format X.509 PEM yang dihasilkan di Langkah 1 sebagai kunci privat untuk menerbitkan JWT. Langkah-langkah berikut menggunakan Python sebagai contoh untuk menunjukkan proses menghasilkan token menggunakan skrip lokal.
Instal modul PyJWT.
pip install PyJWTJalankan skrip Python berikut di mesin lokal Anda untuk menghasilkan JWT:
import jwt import time private_key = """ -----BEGIN PRIVATE KEY----- <Gunakan kunci privat dalam format X.509 PEM yang dihasilkan di Langkah 1> -----END PRIVATE KEY----- """ headers = { "alg": "RS256", "typ": "JWT" } payload = { "sub": "1234567890", "name": "John Snow", "iat": int(time.time()), # Waktu ketika token diterbitkan. "exp": int(time.time()) + 60 * 60, # Atur periode validitas token menjadi 1 jam. } encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers) print("Token yang dihasilkan: %s" % encoded)
Gunakan Postman untuk memeriksa apakah layanan HTTP dapat diakses.
Pada tab Trigger Management (URL) fungsi yang ingin Anda kelola, dapatkan titik akhir Internet pemicu HTTP. Lalu, masukkan titik akhir di bilah alamat Postman.
Konfigurasikan parameter token di tab Headers di Postman dan klik Send untuk mengirim permintaan. Tabel berikut menjelaskan konfigurasi token.
Nama
Contoh
Deskripsi
Kunci
AuthenticationNama token yang Anda tentukan di bagian JWT Token Configuration.
Nilai
Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLgNilai JWT, yang berisi nilai parameter Hapus Awalan di JWT Token Configuration. Dalam contoh ini, parameter Hapus Awalan diatur ke
Bearer.PentingAwalan dan spasi parameter JWT di header permintaan harus sama dengan parameter Remove Prefix di bagian JWT Token Configuration. Jika tidak, kesalahan terjadi saat pemicu mengurai token dan melaporkan kesalahan "jwt tidak valid atau kedaluwarsa".
Lakukan otentikasi JWT dengan nama domain kustom
Gambar sebelumnya menunjukkan bahwa nama domain kustom memproses permintaan pengguna sebelum pemicu HTTP memproses permintaan. Otentikasi JWT dilakukan pada pemicu HTTP. Bagian ini menjelaskan cara menggunakan otentikasi JWT dalam skenario di mana nama domain kustom dikonfigurasi.
Nama domain kustom tanpa kebijakan penulisan ulang dikonfigurasi
Jika rute dikonfigurasi untuk nama domain kustom tanpa kebijakan penulisan ulang yang dikonfigurasi, jalur permintaan HTTP yang masuk adalah jalur nama domain kustom.
Sebagai contoh, tabel berikut menjelaskan aturan rute untuk nama domain kustom www.fc-jwt.com. Nilai parameter Blacklist of Request Paths dalam konfigurasi JWT pemicu HTTP untuk fungsi jwt-demo adalah /fc-jwt/auth/*.
Jalur | Nama Layanan | Nama Fungsi | Versi |
/fc-jwt/* | jwt | jwt-demo | 1 |
Jika URL permintaan adalah /fc-jwt/auth/aliyun, pemicu HTTP memverifikasi permintaan HTTP karena jalur permintaan cocok dengan nilai yang ditentukan dalam parameter Blacklist of Request Paths.
Nama domain kustom dengan kebijakan penulisan ulang dikonfigurasi
Jika rute dikonfigurasi untuk nama domain kustom dengan kebijakan penulisan ulang yang dikonfigurasi, jalur permintaan HTTP yang masuk adalah URL yang telah ditulis ulang. Untuk informasi lebih lanjut tentang fitur penulisan ulang untuk nama domain kustom, lihat Konfigurasikan Kebijakan Penulisan Ulang (dalam tinjauan publik).
Sebagai contoh, Anda telah mengonfigurasi aturan rute untuk nama domain kustom www.fc-jwt.com seperti yang dijelaskan dalam tabel berikut. Dalam konfigurasi JWT pemicu HTTP untuk fungsi jwt-demo, parameter Blacklist of Request Paths diatur ke /fc-jwt/auth/*, dan kebijakan penulisan ulang wildcard dikonfigurasi. Aturan pencocokan adalah /fc-jwt/*, dan aturan penggantian adalah /$1.
Jalur | Nama Layanan | Nama Fungsi | Versi |
/fc-jwt/* | jwt | jwt-demo | 1 |
Jika URL permintaan adalah /fc-jwt/auth/aliyun, URL yang telah ditulis ulang adalah /auth/aliyun. Untuk informasi lebih lanjut tentang aturan penulisan ulang wildcard, lihat Konfigurasikan Kebijakan Penulisan Ulang (dalam tinjauan publik). Pemicu HTTP tidak memverifikasi permintaan. Dalam hal ini, jalur permintaan ke pemicu HTTP adalah /auth/aliyun dan tidak cocok dengan nilai parameter Blacklist of Request Paths.
Jika Anda mengatur parameter Blacklist of Request Paths ke /auth/*, pemicu HTTP melakukan otentikasi JWT pada permintaan yang URL-nya adalah /fc-jwt/auth/aliyun.