All Products
Search
Document Center

Alibaba Cloud Service Mesh:Otentikasi permintaan JWT untuk gerbang masuk

Last Updated:Jun 21, 2026

Topik ini menjelaskan cara mengonfigurasi otentikasi permintaan JWT di Service Mesh untuk memvalidasi sumber permintaan, juga dikenal sebagai otentikasi pengguna akhir. Saat menerima permintaan pengguna, konfigurasi ini memverifikasi bahwa token akses dalam header permintaan dapat dipercaya dan mengotorisasi permintaan dari sumber yang sah. Topik ini menjelaskan cara mengonfigurasi otentikasi permintaan JWT untuk gerbang masuk di ASM agar hanya permintaan dengan token akses tepercaya yang dapat mengakses layanan.

Prasyarat

Latar Belakang

Topik ini menggunakan layanan httpbin sebagai contoh. Pertama, Anda menggunakan kebijakan RequestAuthentication untuk membatasi permintaan yang mengakses layanan melalui gerbang masuk. Kebijakan awal ini mengizinkan permintaan dengan JWT yang valid dan menolak permintaan dengan JWT yang tidak valid, tetapi tetap mengizinkan permintaan tanpa JWT. Berdasarkan hal tersebut, Anda dapat menggunakan kebijakan otorisasi untuk lebih membatasi permintaan dalam dua skenario berikut:

  • Gunakan kebijakan otorisasi untuk mewajibkan semua permintaan menyertakan JWT agar dapat mengakses layanan melalui gerbang masuk.

  • Gunakan kebijakan otorisasi untuk mewajibkan semua permintaan menyertakan JWT dari penerbit tertentu agar dapat mengakses layanan melalui gerbang masuk.

Langkah 1: Deploy layanan contoh

  1. Aktifkan injeksi otomatis untuk namespace default.

    1. Masuk ke Konsol ASM.

    2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    3. Pada halaman detail instans ASM, pilih ASM Instance > Global Namespace di panel navigasi kiri.

    4. Pada halaman Global Namespace, temukan default dan klik Enable Automatic Sidecar Proxy Injection pada kolom Automatic Sidecar Injection.

    5. Pada kotak dialog Confirm, klik OK.

  2. Deploy layanan contoh.

    1. Sambungkan ke kluster menggunakan kubectl dan file KubeConfig kluster.

    2. Buat file bernama httpbin.yaml dengan konten berikut:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    3. Jalankan perintah berikut untuk membuat aplikasi httpbin.

      kubectl apply -f httpbin.yaml -n default

Langkah 2: Buat Gateway dan virtual service

  1. Buat Gateway.

    1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Gateway. Pada halaman yang muncul, klik Create from YAML.

    3. Atur Namespaces menjadi default, masukkan konten berikut ke dalam kotak teks, lalu klik Create.

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: httpbin-gateway
        namespace: default
      spec:
        selector:
          istio: ingressgateway
        servers:
          - hosts:
              - '*'
            port:
              name: http
              number: 80
              protocol: HTTP
  2. Buat virtual service.

    1. Pada halaman detail instans ASM, pilih Traffic Management Center > VirtualService di panel navigasi kiri. Pada halaman yang muncul, klik Create from YAML.

    2. Atur Namespaces menjadi default, masukkan konten berikut ke dalam kotak teks, lalu klik Create.

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: httpbin
        namespace: default
      spec:
        gateways:
          - httpbin-gateway
        hosts:
          - '*'
        http:
          - route:
              - destination:
                  host: httpbin
                  port:
                    number: 8000

Langkah 3: Buat kebijakan RequestAuthentication

  1. Buat JWK.

    1. Di OpenSSL, jalankan perintah berikut untuk menghasilkan kunci privat RSA 2048-bit.

      openssl genrsa -out rsa-private-key.pem 2048
    2. Jalankan perintah berikut untuk menghasilkan kunci publik dari kunci privat.

      openssl rsa -in rsa-private-key.pem -pubout -out rsa-public-key.pem
    3. Di tool JWK to PEM Convertor daring, pilih PEM-to-JWK (RSA Only), masukkan kunci publik, lalu klik submit untuk mengonversi kunci publik menjadi JWK.

      {"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add7863915c","n":"2dnwOlDKEwII9Cyh9w7o59a5y3RS2gWUKYC3HSBJL1FhYIZa7sjTCKxwEuG-vCRQkR6augWxYWseSDfgtyivzi3CxxkF8WnQbECOCGm5xAYKmMcXeOpv0zsJTHN122Tt_tsd6K2OC3yGwKtmp7m-MOpHagqWRqFtvyEOm_1JW1-t0n1VsGSeWww8dvcmnJPKAKHbAU40jdV1hMn9AA3RfSpDY6nfrUkpXA5-aQ6rJRjMn36DatZ5ykVL4LKPOUxZdfK_yNIPkCnwIKesqiOpr4s-iCM8pMiZuejDZ1qoX-uBjggESf4G9_L-laDSeoDmXeOZ9kzN3Jw8ay69ihIFEQ"}
  2. Buat kebijakan RequestAuthentication.

    1. Masuk ke Konsol ASM.

    2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    3. Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM atau klik Manage pada kolom Actions.

    4. Di panel navigasi kiri halaman detail instans ASM, pilih Mesh Security Center > RequestAuthentication. Pada halaman yang muncul, klik Create.

    5. Pada halaman Create, konfigurasi parameter lalu klik Create.

      Parameter

      Deskripsi

      Namespaces

      Atur Namespaces menjadi istio-system.

      Name

      Masukkan nama untuk kebijakan.

      Match Label

      Memilih beban kerja yang akan diterapkan kebijakan ini.

      Klik Add Matching Label. Atur Name menjadi istio dan Value menjadi ingressgateway.

      JWT Rule Set

      Klik Add di sebelah kanan JWT Rule Set dan konfigurasi aturan JWT:

      • issuer: Penerbit JWT. Dalam topik ini, atur menjadi testing@asm.test.io.

      • audiences: Daftar audiens untuk JWT. Ini menentukan layanan mana yang dapat menggunakan JWT. Biarkan kosong untuk mengizinkan akses ke semua layanan.

      • jwks: Informasi JWT. Atur menjadi {"keys":[YOUR_JWK]}. Misalnya, jika JWK dari Langkah 3 adalah {"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add786****"}, atur jwks menjadi {"keys":[{"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add786****"}]}.

Langkah 4: Verifikasi kebijakan RequestAuthentication

  1. Gunakan tool seperti JWT.io untuk mengencode informasi permintaan JWT Anda menjadi JWT.

    Pada bagian Decoded, masukkan informasi permintaan JWT. Tool secara otomatis mengonversinya menjadi JWT di bagian Encoded.

    • HEADER: Atur algoritma enkripsi ke RS256, masukkan kid dari JWK Anda, dan atur tipe ke JWT.

    • PAYLOAD: Atur iss ke testing@asm.test.io. Anda juga dapat menambahkan informasi kustom.

    • VERIFY SIGNATURE: Masukkan kunci publik dan kunci privat yang Anda buat di Langkah 3.

    Dalam contoh ini, nilai kid pada HEADER adalah 59399e22-7a9a-45ed-8c76-7add7863915c. PAYLOAD juga berisi klaim sub dengan nilai testing@asm.test.io, klaim iat dengan nilai 1623389700, dan klaim kustom foo dengan nilai bar.

  2. Akses layanan melalui gerbang masuk.

    1. Jalankan perintah berikut untuk mengirim permintaan dengan JWT valid yang dibuat di langkah sebelumnya.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT
    2. Jalankan perintah berikut untuk mengirim permintaan dengan JWT tidak valid.

      curl -I  -H "Authorization: Bearer invalidToken" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Output yang diharapkan:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy
    3. Jalankan perintah berikut untuk mengirim permintaan tanpa JWT.

      curl -I http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

    Hasil ini mengonfirmasi kebijakan RequestAuthentication berfungsi: permintaan dengan token valid atau tanpa token berhasil, sedangkan permintaan dengan token tidak valid ditolak.

Langkah 5: Buat kebijakan otorisasi

Skenario 1: Batasi akses layanan

Buat kebijakan otorisasi untuk mewajibkan semua permintaan menyertakan JWT agar dapat mengakses layanan melalui gerbang masuk.

  1. Masuk ke Konsol ASM.

  2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM atau klik Manage pada kolom Actions.

  4. Pada halaman detail instans ASM, pilih Mesh Security Center > AuthorizationPolicy di panel navigasi kiri. Pada halaman yang muncul, klik Create.

  5. Pada halaman Create, konfigurasi parameter lalu klik Create.

    Dalam contoh ini, masukkan require-jwt untuk Name.

    Parameter

    Deskripsi

    Name

    Masukkan nama untuk kebijakan otorisasi.

    Policy Type

    Atur Policy Type menjadi ALLOW.

    Gateway Scope

    Klik tab Gateway Scope dan atur ASM Gateway menjadi ingressgateway. Pada bagian Add Request Source, aktifkan RequestPrincipals dan masukkan * ke dalam kotak teks.

  6. Verifikasi kebijakan otorisasi.

    1. Jalankan perintah berikut untuk mengirim permintaan tanpa JWT.

      curl -I http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Output yang diharapkan:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy
    2. Jalankan perintah berikut untuk mengirim permintaan dengan JWT valid.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

    Hasil ini mengonfirmasi kebijakan otorisasi berfungsi: permintaan tanpa JWT kini ditolak, sedangkan permintaan dengan token valid berhasil.

Skenario 2: Batasi penerbit JWT

Buat kebijakan otorisasi untuk mewajibkan permintaan menyertakan JWT dari penerbit tertentu agar dapat mengakses layanan melalui gerbang masuk.

  1. Masuk ke Konsol ASM.

  2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM atau klik Manage pada kolom Actions.

  4. Pada halaman detail instans ASM, pilih Mesh Security Center > AuthorizationPolicy di panel navigasi kiri. Pada halaman yang muncul, klik Create.

  5. Pada halaman Create, konfigurasi parameter lalu klik Create.

    Parameter

    Deskripsi

    Name

    Masukkan nama untuk kebijakan otorisasi.

    Policy Type

    Atur Policy Type menjadi ALLOW.

    Gateway Scope

    Klik tab Gateway Scope dan atur ASM Gateway menjadi ingressgateway. Pada bagian Add Request Source, aktifkan RequestPrincipals dan masukkan testing@asm.test.io/demo@asm.test.io ke dalam kotak teks.

  6. Verifikasi bahwa kebijakan otorisasi membatasi akses berdasarkan penerbit.

    1. Jalankan perintah berikut untuk mengirim permintaan dengan JWT asli.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Output yang diharapkan:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy

      Permintaan gagal karena kebijakan otorisasi mengharuskan principal JWT menjadi testing@asm.test.io/demo@asm.test.io. Principal token asli, yaitu testing@asm.test.io/testing@asm.test.io (issuer/subject), tidak sesuai.

    2. Modifikasi JWT agar memiliki principal testing@asm.test.io/demo@asm.test.io.

      Di tool JWT, atur klaim iss menjadi testing@asm.test.io dan klaim sub menjadi demo@asm.test.io pada bagian PAYLOAD. Pertahankan semua konfigurasi lainnya sama seperti sebelumnya.

      // Header
      {
        "alg": "RS256",
        "kid": "59399e22-7a9a-45ed-8c76-7add7863915c",
        "typ": "JWT"
      }
      // Payload
      {
        "foo": "bar",
        "iat": 1623389700,
        "iss": "testing@asm.test.io",
        "sub": "demo@asm.test.io"
      }
    3. Jalankan perintah berikut untuk mengirim permintaan dengan JWT yang baru dihasilkan.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

      Permintaan berhasil, mengonfirmasi bahwa kebijakan otorisasi membatasi akses dengan benar berdasarkan principal JWT.