全部产品
Search
文档中心

Microservices Engine:Konfigurasikan otorisasi konsumen

更新时间:Jun 28, 2025

Di gateway cloud-native Microservices Engine (MSE), Anda dapat mengonfigurasi aturan otentikasi untuk rute agar hanya memperbolehkan akses dari konsumen yang telah terotentikasi. Topik ini menjelaskan cara mengonfigurasi otorisasi konsumen.

Informasi latar belakang

Otentikasi global cocok untuk skenario To Consumer (ToC), seperti otentikasi logon terpusat. Otentikasi rute dan otorisasi konsumen cocok untuk skenario To Business (ToB), seperti pemberian izin pada operasi API kepada mitra.

Item

Otentikasi global

Otentikasi rute dan otorisasi konsumen

Skema

Skema ToC, seperti otentikasi logon terpusat.

Skema ToB, seperti pemberian izin pada operasi API kepada mitra.

Perbedaan utama

Otorisasi juga diaktifkan saat Anda mengaktifkan otentikasi.

Anda harus mengonfigurasi pengaturan otorisasi setelah mengaktifkan otentikasi.

Titik masuk

Security Management > Global Authentication

  1. Routes > Policies > Authentication

  2. Security Management > Consumer Authentication

Konfigurasi otentikasi berdasarkan JSON Web Token (JWT)

  1. Saat membuat aturan otentikasi, masukkan konfigurasi JWKS global.

  2. Tentukan bidang Issue dan Sub yang digunakan untuk memverifikasi JWT.

  1. Saat membuat konsumen, masukkan konfigurasi JWKS konsumen.

  2. Di bidang Identitas Konsumen di bagian JWT Payload, tentukan pasangan kunci-nilai yang digunakan untuk mengidentifikasi konsumen. Secara default, nilai uid dalam payload digunakan. Anda dapat menentukan pasangan kunci-nilai berdasarkan kebutuhan bisnis Anda.

Konfigurasi otorisasi

Saat membuat aturan otorisasi, pilih Daftar Putih atau Daftar Hitam dan tentukan bidang Domain Name dan Path.

  • Blacklist: Konsumen yang Domain Name dan Path-nya termasuk dalam daftar hitam harus diotentikasi. Konsumen lain tidak perlu diotentikasi.

  • Whitelist: Konsumen yang Domain Name dan Path-nya termasuk dalam daftar putih tidak perlu diotentikasi. Konsumen lain harus diotentikasi.

  1. Di halaman Policies, aktifkan Authentication untuk rute.

  2. Di halaman Consumer Authentication, asosiasikan rute yang memiliki otentikasi dengan konsumen untuk menyelesaikan otorisasi.

Buat konsumen

  1. Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.

  2. Di panel navigasi sisi kiri, pilih Cloud-native Gateway > Gateways.

  3. Di halaman Gateways, klik nama gateway.

  4. Di panel navigasi sisi kiri, pilih Security Management > Consumer Authentication

  5. Klik Create Consumer.

  6. Konfigurasikan parameter dan klik OK.

    创建消费者.png

    Tabel berikut menjelaskan parameter.

    Parameter

    Deskripsi

    Consumer Name

    Nama konsumen.

    Consumer Description

    Deskripsi konsumen.

    Authentication Type

    Metode otentikasi yang didukung oleh konsumen.

    Key Type

    • Symmetric Key: JWKS default yang bervariasi berdasarkan konsumen dibuat. JWKS default berisi kunci yang digunakan untuk mengenkripsi atau mendekripsi token.

    • Asymmetric Key: Anda harus memasukkan konfigurasi JWKS lengkap. Token dienkripsi menggunakan kunci privat. Gateway melakukan dekripsi berdasarkan kunci publik dalam JWKS.

    JWKS

    Masukkan konfigurasi JWKS. Untuk informasi lebih lanjut tentang spesifikasi JWKS, lihat JSON Web Key (JWK).

    JWT Token

    Konfigurasikan token JWT.

    • Type: tipe token. Nilai default adalah HEADER.

    • Key: nama token.

    • Prefix: awalan token. Konfigurasikan parameter yang diperlukan untuk memvalidasi token. Secara default, token berisi awalan Bearer dan disimpan di Authorization header. Contoh: Authorization: Bearer <token>.

    • Enable Passthrough: Jika Anda memilih opsi ini, token akan disalurkan ke layanan backend.

    Consumer Identity in JWT Payload

    Kunci dan nilai dalam payload JWT yang digunakan untuk mengidentifikasi konsumen. Secara default, kuncinya adalah uid, dan nilainya adalah string acak. Anda dapat mengubah nilainya berdasarkan kebutuhan bisnis Anda.

    Kode berikut adalah payload dalam token JWT jika konsumen dibuat berdasarkan konfigurasi pada gambar sebelumnya.

    {
      "uid": "11215ac069234abcb8944232b79ae711"
    }

Metode pembuatan token

Berikut ini adalah contoh pembuatan token dalam Java. Dalam bahasa pemrograman lain, Anda dapat menggunakan alat terkait untuk menghasilkan pasangan kunci.

Buat proyek Maven dan tambahkan dependensi berikut ke proyek:

<dependency>
    <groupId>org.bitbucket.b_c</groupId>
    <artifactId>jose4j</artifactId>
    <version>0.7.0</version>
</dependency>

Gunakan kunci simetris default untuk menghasilkan token

Tampilkan kode

package org.example;

import java.io.UnsupportedEncodingException;
import java.security.PrivateKey;

import org.jose4j.base64url.Base64;
import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.OctJwkGenerator;
import org.jose4j.jwk.OctetSequenceJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.keys.HmacKey;
import org.jose4j.lang.JoseException;
import sun.lwawt.macosx.CSystemTray;

public class Main {
    public static void main(String[] args) throws JoseException, UnsupportedEncodingException {
        // Contoh sebelumnya digunakan.
        String privateKeyJson = "{\n"
                + "    \"k\": \"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY\",\n"
                + "    \"kty\": \"oct\",\n"
                + "    \"alg\": \"HS256\",\n"
                + "}";
        JwtClaims claims = new JwtClaims();
        claims.setGeneratedJwtId();
        claims.setIssuedAtToNow();
        // Tentukan waktu kedaluwarsa, yang kurang dari tujuh hari.
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
        // Tambahkan parameter kustom. Semua nilai parameter harus bertipe STRING.
        // Konfigurasikan ID konsumen.
        claims.setClaim("uid", "11215ac069234abcb8944232b79ae711");
        JsonWebSignature jws = new JsonWebSignature();
        // Tentukan algoritma enkripsi.
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
        jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
        jws.setPayload(claims.toJson());
        String jwtResult = jws.getCompactSerialization();
        System.out.println("Generate Json Web token , result is \n " + jwtResult);
    }
}

Konfigurasi dalam kode:

  • Konfigurasi privateKeyJson menentukan JWKS yang digunakan saat membuat konsumen. Anda dapat mencatat JWKS saat membuat konsumen atau mendapatkan JWKS dari halaman konfigurasi dasar konsumen setelah membuat konsumen.

    消费者.png

  • Konfigurasikan ID konsumen. Konfigurasi claims.setClaim("uid", "11215ac069234abcb8944232b79ae711") menentukan ID konsumen. Ini dihasilkan secara otomatis oleh konsol saat Anda membuat konsumen. Anda dapat mengubah ID konsumen berdasarkan logika.

    消费者标识.png

    Anda juga bisa mendapatkan ID konsumen di halaman konfigurasi dasar konsumen setelah membuat konsumen.获取消费者标识.png

  • Konfigurasikan algoritma enkripsi. Konfigurasi jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256) menentukan algoritma enkripsi, yang harus sesuai dengan JWKS.

    Catatan

    Algoritma enkripsi berikut didukung: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384, PS512, HS256, HS384, HS512, dan EdDSA.

    加密算法.png

    Saat menggunakan enkripsi simetris, Anda harus mendekode "k".

    jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
  • Konfigurasikan waktu kedaluwarsa. Waktu kedaluwarsa harus kurang dari tujuh hari. Setelah waktu kedaluwarsa tercapai, kami sarankan Anda menghasilkan token baru untuk memastikan keamanan.

    ...
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
    ...
  • Anda dapat menambahkan parameter kustom ke JWKS PAYLOAD berdasarkan kebutuhan bisnis Anda.

Gunakan kunci asimetris untuk menghasilkan token

Tampilkan kode

package org.example;

import java.io.UnsupportedEncodingException;
import java.security.PrivateKey;

import org.jose4j.base64url.Base64;
import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.OctJwkGenerator;
import org.jose4j.jwk.OctetSequenceJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.keys.HmacKey;
import org.jose4j.lang.JoseException;
import sun.lwawt.macosx.CSystemTray;

public class Main {
    public static void main(String[] args) throws JoseException, UnsupportedEncodingException {
        // Contoh sebelumnya digunakan.
        String privateKeyJson = "{\n"
                + "    \"k\": \"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY\",\n"
                + "    \"kty\": \"oct\",\n"
                + "    \"alg\": \"HS256\",\n"
                + "}";
        JwtClaims claims = new JwtClaims();
        claims.setGeneratedJwtId();
        claims.setIssuedAtToNow();
        // Tentukan waktu kedaluwarsa, yang kurang dari tujuh hari.
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
        // Tambahkan parameter kustom. Semua nilai parameter harus bertipe STRING.
        // Konfigurasikan ID konsumen.
        claims.setClaim("uid", "11215ac069234abcb8944232b79ae711");
        JsonWebSignature jws = new JsonWebSignature();
        // Konfigurasikan algoritma enkripsi.
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
        jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
        jws.setPayload(claims.toJson());
        String jwtResult = jws.getCompactSerialization();
        System.out.println("Generate Json Web token , result is \n " + jwtResult);
    }
}

Konfigurasi dalam kode:

  • Konfigurasikan parameter privateKeyJson, ID konsumen, dan waktu kedaluwarsa sama seperti saat Anda menggunakan algoritma enkripsi simetris.

  • Konfigurasi jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256) menentukan algoritma enkripsi. Algoritma enkripsi harus sesuai dengan JWKS.

    Jika algoritma enkripsi asimetris digunakan, kunci privat diperlukan untuk enkripsi.

    ...
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
        PrivateKey privateKey = new RsaJsonWebKey(JsonUtil.parseJson(privateKeyJson)).getPrivateKey();
        jws.setKey(privateKey);
    ...
  • Anda dapat menambahkan parameter kustom ke JWKS PAYLOAD berdasarkan kebutuhan bisnis Anda.

Aktifkan otentikasi rute

  1. Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.

  2. Di panel navigasi sisi kiri, pilih Cloud-native Gateway > Gateways.

  3. Di halaman Gateways, klik ID gateway.

  4. Di panel navigasi sisi kiri, klik Routes. Lalu, klik tab Routes.

  5. Temukan rute yang diinginkan, dan klik Policies di kolom Actions.

  6. Di halaman Policies, klik tab Authentication. Lalu, konfigurasikan parameter, dan klik Save.

    Parameter

    Deskripsi

    Authentication Type

    Metode yang digunakan untuk mengotentikasi konsumen sebelum konsumen dapat mengakses rute.

    Enabled

    Menentukan apakah akan mengaktifkan otentikasi. Setelah Anda menyalakan sakelar, otentikasi mulai berlaku.

Otorisasi konsumen untuk mengakses rute

  1. Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.

  2. Di panel navigasi sisi kiri, pilih Cloud-native Gateway > Gateways.

  3. Di halaman Gateways, klik ID gateway.

  4. Di panel navigasi sisi kiri, pilih Security Management > Consumer Authentication

  5. Temukan konsumen yang diinginkan dan klik Authorization di kolom Actions.

  6. Di tab Consumer Authorization, klik Associate Route, pilih rute tempat Anda ingin konsumen memiliki izin akses, lalu klik OK.