API Gateway berbasis cloud mendukung autentikasi global, autentikasi tingkat rute, dan otorisasi konsumen. Topik ini menjelaskan cara mengonfigurasi setiap metode autentikasi serta memberikan otorisasi kepada konsumen untuk mengakses rute dan API tertentu.
Latar belakang
Autentikasi global cocok untuk skenario B2C seperti logon terpadu. Autentikasi konsumen untuk rute dan API cocok untuk skenario B2B seperti pemberian akses API kepada mitra.
|
Item |
Autentikasi global |
Autentikasi rute dan otorisasi konsumen |
|
Kasus penggunaan |
Skema B2C, seperti autentikasi logon terpadu. |
Skema B2B, seperti pemberian akses API kepada mitra. |
|
Perbedaan utama |
Otorisasi diaktifkan secara otomatis saat autentikasi diaktifkan. |
Setelah Anda mengaktifkan autentikasi, Anda harus mengonfigurasi otorisasi secara terpisah. |
|
Jalur konfigurasi |
. |
|
|
Konfigurasi metode autentikasi (contoh autentikasi JWT) |
|
|
|
Konfigurasi metode otorisasi |
Saat membuat konfigurasi, berikan daftar Domain Name dan Path untuk blacklist atau whitelist.
|
|
Catatan penggunaan
Setelah Anda mengaktifkan autentikasi konsumen, kebijakan tersebut langsung berlaku. Jika tidak ada konsumen atau aturan otorisasi yang dikonfigurasi untuk rute atau API yang dipublikasikan, gateway akan menolak semua permintaan secara default.
Gunakan autentikasi dan otorisasi konsumen
Autentikasi JWT
Alur kerja autentikasi JWT
-
Klien mengirim permintaan autentikasi ke gateway, biasanya dengan username dan password pengguna akhir.
-
Gateway meneruskan permintaan tersebut ke layanan backend.
-
Backend memvalidasi kredensial tersebut. Setelah validasi berhasil, layanan tersebut menghasilkan token dengan kunci privat dan mengembalikan token tersebut ke gateway.
-
Gateway mengembalikan token tersebut ke klien. Klien menyimpan cache token ini secara lokal.
-
Klien mengirim permintaan bisnis dengan token yang disimpan ke gateway.
-
Gateway memverifikasi token menggunakan kunci publik yang dikonfigurasi. Jika valid, gateway meneruskan permintaan ke backend.
-
Backend memproses permintaan dan mengembalikan respons.
-
Gateway meneruskan respons tersebut ke klien.
Bagian berikut menjelaskan cara menghasilkan token, mengirim permintaan ke gateway, dan memvalidasi token menggunakan kunci publik yang dikonfigurasi.
Hasilkan token
Contoh Java berikut menunjukkan cara menghasilkan token. Anda dapat menggunakan alat serupa dalam bahasa pemrograman lain.
-
Buat proyek Maven dan tambahkan dependensi.
Tambahkan dependensi berikut ke proyek:
<dependency> <groupId>org.bitbucket.b_c</groupId> <artifactId>jose4j</artifactId> <version>0.7.0</version> </dependency> -
Pilih metode untuk menghasilkan token.
Anda dapat menghasilkan token menggunakan kunci simetris atau asimetris.
Kunci simetris
Kode contoh:
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 { // Gunakan contoh dari topik ini. String privateKeyJson = "{\n" + " \"k\": \"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY\",\n" + " \"kty\": \"oct\",\n" + " \"alg\": \"HS256\",\n" + "}"; JwtClaims claims = new JwtClaims(); claims.setGeneratedJwtId(); claims.setIssuedAtToNow(); // Atur waktu kedaluwarsa kurang dari 7 hari. NumericDate date = NumericDate.now(); date.addSeconds(120*60); claims.setExpirationTime(date); claims.setNotBeforeMinutesInThePast(1); // Tambahkan parameter kustom. Semua nilai harus bertipe String. // Atur identifikasi konsumen. claims.setClaim("uid", "11215ac069234abcb8944232b79ae711"); JsonWebSignature jws = new JsonWebSignature(); // Atur 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); } }Pengaturan kode:
-
privateKeyJson: JWKS yang digunakan saat membuat konsumen. Simpan JWKS selama pembuatan konsumen, atau ambil dari halaman konfigurasi dasar konsumen. -
Atur identifikasi konsumen. Pernyataannya adalah
claims.setClaim("uid", "11215ac069234abcb8944232b79ae711"). Identifikasi ini dibuat otomatis saat Anda membuat konsumen tetapi dapat dimodifikasi. Anda juga dapat mengambilnya dari halaman konfigurasi dasar konsumen. -
Atur algoritma enkripsi. Pernyataannya adalah
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256). Algoritma ini harus sesuai dengan yang ada di JWKS.CatatanAlgoritma enkripsi yang didukung meliputi ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384, PS512, HS256, HS384, HS512, dan EdDSA.
Untuk enkripsi simetris, nilai "k" harus didekode.
jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
-
Atur waktu kedaluwarsa. Token harus kedaluwarsa dalam waktu tujuh hari. Setelah kedaluwarsa, hasilkan token baru.
... NumericDate date = NumericDate.now(); date.addSeconds(120*60); claims.setExpirationTime(date); claims.setNotBeforeMinutesInThePast(1); ... -
Anda dapat menambahkan parameter kustom ke PAYLOAD JWKS sesuai kebutuhan.
Kunci asimetris
Kode contoh:
package org.example; import java.security.PrivateKey; import org.jose4j.json.JsonUtil; import org.jose4j.jws.AlgorithmIdentifiers; import org.jose4j.jws.JsonWebSignature; import org.jose4j.jwt.JwtClaims; import org.jose4j.jwt.NumericDate; import org.jose4j.lang.JoseException; import org.jose4j.jwk.RsaJsonWebKey; public class Main { public static void main(String[] args) throws JoseException { // Contoh kunci dalam format JWK. String privateKeyJson = "{" + "\"kty\":\"RSA\"," + "\"n\":\"u-8lR9lyRhu8tl4vRxOl7yfshssx5jRstabc9n4Rxrz102Z7TPFYrXBZHgf67Y0d-zx9tWd5j91WZxLHv4K6VWPN7zEWEQNn3vUg76dPHPzVkZJWziFPS1EvS4a2gRZdrE4nPogaQ72WySVC0yUF2fL0NKeOclD__coCFxn4QQjcDXyu_CUbI_FuDcdw267mVjjylAaFvOZHH0pXsV8m5zXlpc2aiemWYQJD9MtWRcoKlexWMkTwbEqW5-NWAl0Uo202ahDA1NiaQ98Ch4nw6g2E1GvwxxHkbvMuZcs5z8F5Ct_w0IPtvY7ngSyEN-WCU40oj-C5NUCy_73FpXXdWQ\"," + "\"e\":\"AQAB\"," + "\"d\":\"Uxg1IqSZazg-Y2AXhVTBrJG5egwD3yZU3qiN0IsDbx0DkFoisG2R6PXg4W9j2n7nv7sKVhgPXrXdyys5mIrDuperaVQJzrHzzlgSHQSb7VQ5Vekfanq95a5avAkvTrpF5raTkYl6G3OLZRqNhnA7Oxe6NEHVsOPxnBQignZgFtiBtCSZY4RVH6Dx4jFfBBNMC9ifyLWLpHut7eczvxI412nBkxgtEjSeFe083NlumO_ZYHbijPcQf5zFWPLEj2EvlgbSwhjc-uSAF4OljAyG_DHZYvztEIGMdxMgBHgwtEvCfzS6PeUgvUR-SB7m_L8z4gjz6TlpSYe3CnZqE69KdQ\"," + "\"p\":\"9mNw8U_GxbcSknueUeFFSU9wKD9E9P2ZO5RP5d7o3qGUXOfbrH_g5GMH3YJiPBDZs_2BYFrAACOY4YM-QTiXWVs4xS3OeD8AdH3wEXR_3DMEkOez3cNq3Jy3ZJabm7IUnPMIWv5gpIHghcx0YTtM5RabSgexLMKh2-6sB466378\"," + "\"q\":\"w0PzXI_8Q5jv15OUq-dV_Z0kp91Icumf6PEERZN4v3i3VolLBnamMiIQiF74ywclKpZmtfOQTfyL41Xj2vbm2Aus6akRsU3NhQlVtIQTzHWUuEQgMIJYDK7--FzEcZORm1qBiEffiWv6U-slyCcLcNDNT-wjMX8BrS4oWHIoCOc\"," + "\"dp\":\"fRRiY76yE_EqVn63Eq4ftGXFdEkaQpzzS1GxderBoTO506hI1rtcedTkS0lDgWa0fjE1mqq3SdrIY8NyuT13Z_9tRHxKkrS5EGpWkyXnOuwTZ1SY9P2dpD1SxJfIizPOTxb5qOf2O81LI-F1O18VXD8rultJUIXGEZaKcpO8vpU\"," + "\"dq\":\"V6EP_vMzD5b707AMYVURFx7Fi3vX_pHvzJcVBrBW2P6wsGouvDjU_tygtMKCPoL3X_RdJbynfwgeMyihd-ujz0L2F2pjYUF8QP7ecoNvays9UbBpDbwBDbge_pCLLDlAeAqW5PT0UXSew7hcnUVAciGSchKT_Kt1siVrv72DT_M\"," + "\"qi\":\"w5fENzxOivbbbUbawAWSuLgWPtvbTKn2XuPzwr_JzZH08-nadWwQFChcvAiCs8V-306TQOh8NfY308QpGDIq-iRfrS7CEePOjRzpHJfsaQ1IFQqzgDZ9VGdJRDlZqRHx0DbqwMlleVKTC6ER6varalbr4lKU-ZPUQLCzj0e4PMs\"" + "}"; JwtClaims claims = new JwtClaims(); claims.setGeneratedJwtId(); // Hasilkan JTI (JWT ID) secara otomatis. claims.setIssuedAtToNow(); // Atur waktu diterbitkan (iat) ke waktu saat ini. // Atur waktu kedaluwarsa kurang dari 7 hari. NumericDate date = NumericDate.now(); date.addSeconds(120 * 60); // Atur kedaluwarsa menjadi 120 menit dari sekarang. claims.setExpirationTime(date); claims.setNotBeforeMinutesInThePast(1); // Atur waktu not before (nbf) menjadi 1 menit di masa lalu. // Tambahkan parameter kustom. Semua nilai harus bertipe String. // Atur identifikasi konsumen. claims.setClaim("uid", "11215ac069234abcb8944232b79ae711"); JsonWebSignature jws = new JsonWebSignature(); // Atur algoritma enkripsi ke RSA-SHA256. jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256); // Urai kunci privat dan atur dalam penandatangan. PrivateKey privateKey = new RsaJsonWebKey(JsonUtil.parseJson(privateKeyJson)).getPrivateKey(); jws.setKey(privateKey); // Atur konten payload. jws.setPayload(claims.toJson()); // Hasilkan JWT. String jwtResult = jws.getCompactSerialization(); System.out.println("Generate Json Web token , result is \n " + jwtResult); } }Pengaturan kode:
-
Pengaturan untuk
privateKeyJson, identifikasi konsumen, dan waktu kedaluwarsa mirip dengan enkripsi simetris.Atur algoritma enkripsi dengan pernyataan
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256). Algoritma ini harus sesuai dengan yang ada di JWKS.Untuk algoritma enkripsi asimetris, Anda harus menggunakan kunci privatnya 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
PAYLOADJWT.
-
Kirim permintaan bisnis
API Gateway berbasis cloud mendukung pengiriman token dalam header permintaan. Anda dapat menyesuaikan nama header dan awalan token. Kunci dan awalan dalam permintaan harus sesuai dengan yang dikonfigurasi dalam metode autentikasi konsumen.
-
Permintaan tanpa JWT mengembalikan error 401.
curl http://xxx.hello.com/test -
Permintaan dengan JWT tidak valid mengembalikan error 401.
curl http://xxx.hello.com/test -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMyJ9.eyJpc3MiOiJhYmNkIiwic3ViIjoidGVzdCIsImlhdCI6MTY2NTY2MDUyNywiZXhwIjoxODY1NjczODE5fQ.-vBSV0bKeDwQcuS6eeSZN9dLTUnSnZVk8eVCXdooCQ1' -
Jika permintaan mencakup JWT yang valid tetapi konsumen tidak diotorisasi untuk API atau rute tersebut, error 403 dikembalikan.
# consumer1 tidak diotorisasi untuk rute atau API pada path yang ditentukan. curl 'http://xxx.example.com/test' -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMyJ9.eyJpc3MiOiJhYmNkIiwic3ViIjoidGVzdCIsImlhdCI6MTY2NTY2MDUyNywiZXhwIjoxODY1NjczODE5fQ.-vBSV0bKeDwQcuS6eeSZN9dLTUnSnZVk8eVCXdooCQ4'
Validasi token di sisi server
Validasi token memiliki tiga langkah:
-
Periksa apakah permintaan mencakup token. Jika tidak, tolak dengan kode 401.
-
Verifikasi validitas dan kedaluwarsa token menggunakan kunci publik dari JWKS konsumen. Jika tidak valid atau kedaluwarsa, tolak dengan kode 401.
-
Periksa apakah konsumen diotorisasi untuk mengakses API atau rute yang diminta.
Kode kesalahan umum
|
Kode status HTTP |
Pesan kesalahan |
Deskripsi |
|
401 |
Jwt missing |
JWT tidak ada dalam header permintaan. |
|
401 |
Jwt expired |
JWT telah kedaluwarsa. |
|
401 |
Jwt verification fails |
Verifikasi payload JWT gagal, misalnya karena ketidaksesuaian |
|
403 |
Access Denied |
Tidak memiliki izin untuk mengakses rute saat ini. |
Autentikasi AK/SK (HMAC)
Pembuatan signature di sisi klien
Klien menghasilkan signature dalam tiga langkah:
-
Ekstrak string yang akan ditandatangani: Ekstrak data kunci dari permintaan asli untuk membentuk string yang akan ditandatangani.
-
Buat signature: Enkripsi string yang akan ditandatangani dengan SK untuk menghasilkan signature akhir.
-
Tambahkan signature: Tambahkan semua header terkait signature ke permintaan HTTP asli untuk membentuk permintaan akhir.
Langkah 1: Ekstrak string yang akan ditandatangani
Ekstrak data kunci dari permintaan HTTP dan susun menjadi string yang akan ditandatangani dalam format berikut:
HTTPMethod
Accept
Content-MD5
Content-Type
Date
Headers
PathAndParameters
Ketujuh bidang ini membentuk string yang akan ditandatangani, dipisahkan oleh karakter baris baru (\n). Jika bidang Headers kosong, tidak perlu baris baru setelahnya. Untuk bidang kosong lainnya, sertakan karakter baris barunya. Signature bersifat case-sensitive. Setiap bidang diekstrak sebagai berikut:
-
HTTPMethod: Metode HTTP, dalam huruf kapital. Contoh:
POST. -
Accept: Nilai header Accept. Bisa kosong. Kami menyarankan agar Anda menyetel header Accept secara eksplisit. Jika kosong, beberapa klien HTTP menetapkan nilai default
*/*, yang menyebabkan verifikasi signature gagal. -
Content-MD5: Nilai header
Content-MD5. Bisa kosong. Hitung hanya untuk permintaan dengan body non-form. Kode Java berikut menunjukkan cara menghitung nilaiContent-MD5:String content-MD5 = Base64.encodeBase64(MD5(bodyStream.getbytes("UTF-8"))); -
Content-Type: Nilai header
Content-Type. Bisa kosong. -
Date: Nilai header Date. Jika
date_offsettidak diaktifkan, ini bisa kosong. Jika diaktifkan, digunakan untuk verifikasi offset waktu. -
Headers: Pilih header tertentu untuk disertakan dalam signature. Gabungkan sebagai berikut:
-
Urutkan kunci header secara alfabetis dan gabungkan:
HeaderKey1 + ":" + HeaderValue1 + "\n"\+ HeaderKey2 + ":" + HeaderValue2 + "\n"\+ ... HeaderKeyN + ":" + HeaderValueN + "\n"
-
Jika nilai header kosong, gunakan
HeaderKey+":"+"\n"untuk signature, tetap menyertakan kunci dan titik dua. -
Cantumkan kunci semua header yang ditandatangani dalam header
X-Ca-Signature-Headers, dipisahkan koma. -
Header berikut tidak disertakan dalam perhitungan signature:
X-Ca-Signature,X-Ca-Signature-Headers,Accept,Content-MD5,Content-Type, danDate.
-
-
PathAndParameters: Mencakup path, parameter kueri, dan parameter form. Dibangun sebagai berikut:
Path + "?" + Key1 + "=" + Value1 + "&" + Key2 + "=" + Value2 + ... "&" + KeyN + "=" + ValueNPenting-
Urutkan kunci parameter kueri dan form secara alfabetis sebelum menggabungkan.
-
Jika parameter kueri dan form kosong, gunakan Path langsung tanpa
?. -
Jika nilai parameter kosong, sertakan hanya kuncinya. Tanda sama dengan (
=) tidak disertakan. -
Jika kueri atau form berisi parameter array (kunci sama, nilai berbeda), gunakan nilai pertama untuk perhitungan signature.
-
Langkah 2: Buat signature
Enkripsi dan encode string yang akan ditandatangani untuk menghasilkan signature akhir. Pada contoh berikut, stringToSign adalah string yang diekstrak, secret adalah SK dari konfigurasi AK/SK, dan sign adalah signature yang dihasilkan:
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] secretBytes = secret.getBytes("UTF-8");
hmacSha256.init(new SecretKeySpec(secretBytes, 0, secretBytes.length, "HmacSHA256"));
byte[] result = hmacSha256.doFinal(stringToSign.getBytes("UTF-8"));
String sign = Base64.encodeBase64String(result);
Decode stringToSign menjadi array byte UTF-8, enkripsi, dan encode hasilnya dengan Base64 untuk menghasilkan signature.
Langkah 3: Tambahkan signature ke permintaan
Sertakan empat header berikut dalam permintaan HTTP untuk verifikasi signature:
-
x-ca-key: AK dari konfigurasi autentikasi AK/SK. -
x-ca-signature-method: Algoritma signature. Nilai yang valid adalahHmacSHA256atauHmacSHA1. Ini opsional dan default-nya adalahHmacSHA256. -
x-ca-signature-headers: Daftar kunci header yang disertakan dalam signature, dipisahkan koma. Ini opsional. -
x-ca-signature: Signature. Ini wajib.
Verifikasi signature di sisi server
Verifikasi signature di sisi server bekerja sebagai berikut:
-
Ekstrak string yang akan ditandatangani: Ekstrak data kunci dari permintaan yang diterima untuk membentuk string yang akan ditandatangani.
-
Ambil SK: Baca AK dari permintaan dan gunakan untuk mengambil SK yang sesuai.
-
Hitung signature: Gunakan algoritma enkripsi yang sama dan SK yang diambil untuk mengenkripsi string yang akan ditandatangani, yang menghasilkan signature sisi server.
-
Verifikasi signature: Baca signature sisi klien dari permintaan dan bandingkan dengan signature sisi server untuk kecocokan.
Troubleshooting
Saat verifikasi signature gagal, server mengembalikan string yang akan ditandatangani (StringToSign) dalam header respons X-Ca-Error-Message. Bandingkan StringToSign sisi server dengan yang Anda hitung secara lokal. Jika cocok, periksa apakah Anda menggunakan SK yang benar. Karena header HTTP tidak dapat berisi karakter baris baru, baris baru dalam StringToSign diganti dengan #:
X-Ca-Error-Message: Server StringToSign:`GET#application/json##application/json##X-Ca-Key:200000#X-Ca-Timestamp:1589458000000#/app/v1/config/keys?keys=TEST`
Kode kesalahan terkait
|
Kode status HTTP |
Pesan kesalahan |
Deskripsi |
|
401 |
Invalid Key |
Header |
|
401 |
Empty Signature |
Header |
|
400 |
Invalid Signature |
Signature dalam header |
|
400 |
Invalid Content-MD5 |
Header |
|
400 |
Invalid Date |
Offset waktu yang dihitung dari header |
|
413 |
Request Body Too Large |
Ukuran body permintaan melebihi batas 32 MB. |
|
413 |
Payload Too Large |
Body permintaan melebihi |
|
403 |
Unauthorized Consumer |
Pemanggil permintaan tidak diotorisasi. |
Kode contoh (Go)
go
package main
import (
"bytes"
"crypto/hmac"
"crypto/md5"
"crypto/sha256"
"encoding/base64"
"fmt"
"io"
"net/http"
"strings"
"time"
)
func generateHMACSignature(toSign string, key string) (string, error) {
h := hmac.New(sha256.New, []byte(key))
h.Write([]byte(toSign))
return base64.StdEncoding.EncodeToString(h.Sum(nil)), nil
}
func test(accessKey, secretKey string) {
body := `{"hello":"world"}`
h := md5.New()
h.Write([]byte(body))
payload := base64.StdEncoding.EncodeToString(h.Sum(nil))
headers := map[string]string{
"accept": "application/json",
"content-type": "application/json",
"date": time.Now().Format("2006-01-02 15:04:05"),
"x-ca-key": accessKey,
"foo": "bar",
"x-ca-signature-headers": "foo",
"content-md5": payload,
}
sts := strings.Join([]string{"POST", headers["accept"], headers["content-md5"], headers["content-type"], headers["date"], "foo:bar", "/post"}, "\n")
fmt.Printf("String to sign is: %s\n", strings.ReplaceAll(sts, "\n", "#"))
sign, _ := generateHMACSignature(sts, secretKey)
fmt.Printf("Signed string is: %s\n", sign)
headers["x-ca-signature"] = sign
req, _ := http.NewRequest("POST", "http://localhost:8080/post", bytes.NewBufferString(body))
for k, v := range headers {
req.Header.Add(k, v)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("read body error")
}
defer resp.Body.Close()
fmt.Println("Headers are as follows:")
for k, v := range resp.Header {
// Jika verifikasi signature gagal, header respons X-Ca-Error-Message
// berisi string to sign sisi server, yang dapat digunakan untuk troubleshooting.
fmt.Printf(" %s: %s\n", k, v)
}
respBody, _ := io.ReadAll(resp.Body)
fmt.Println(string(respBody))
}
func main() {
test("appKey", "appSecret")
}
Autentikasi kunci API
Gateway mengautentikasi permintaan berdasarkan sumber kredensial yang dikonfigurasi. Prosesnya serupa untuk API dan rute. Contoh berikut menggunakan rute.
Terdapat tiga jenis sumber kredensial untuk kunci API:
-
Sumber kredensial default:
Authorization: Bearer <token>. -
Header kustom: Berikan nama header.
-
Parameter kueri kustom: Berikan nama parameter kueri.
Sumber kredensial default
Asumsikan permintaan sesuai dengan rute abc. Kunci API disediakan dalam header Authorization dengan awalan Bearer (perhatikan spasi di akhir).
curl http://xxx.test.com/test -H 'Authorization: Bearer 2bda943c-ba2b-11ec-ba07-00163e1250b5'
Atur kunci API dalam header permintaan
curl http://xxx.test.com/test -H 'x-api-key: 2bda943c-ba2b-11ec-ba07-00163e1250b5'
Sumber header kustom
Asumsikan permintaan sesuai dengan rute abc, dan kunci API berada dalam header kustom.
-
Jika kunci API berada di lokasi yang salah (misalnya, sebagai parameter kueri alih-alih header kustom yang dikonfigurasi), permintaan ditolak dengan kode 401.
curl http://xxx.test.com/test?apikey=2bda943c-ba2b-11ec-ba07-00163e1250b5 -
Jika kebijakan diaktifkan tetapi konsumen tidak diotorisasi, permintaan ditolak dengan kode 403.
curl http://xxx.test.com/test -H 'x-api-key: 2bda943c-ba2b-11ec-ba07-00163e1250b5'
Parameter kueri kustom
Asumsikan permintaan sesuai dengan rute abc, dan kunci API berada dalam parameter URL.
-
Jika autentikasi konsumen tidak diaktifkan untuk rute tersebut, permintaan ditolak dengan kode 401.
curl http://xxx.test.com/test?apikey=2bda943c-ba2b-11ec-ba07-00163e1250b5 -
Jika kebijakan diaktifkan tetapi konsumen tidak diotorisasi, permintaan ditolak dengan kode 403.
curl http://xxx.test.com/test?apikey=2bda943c-ba2b-11ec-ba07-00163e1250b5
Kode kesalahan terkait
|
Kode status HTTP |
Pesan kesalahan |
Deskripsi |
|
401 |
Request denied by Key Auth check. Multi API key found in request. |
Beberapa kunci API disediakan dalam permintaan. |
|
401 |
Request denied by Key Auth check. No API key found in request. |
Tidak ada kunci API yang disediakan dalam permintaan. |
|
401 |
Request denied by Key Auth check. Invalid API key. |
Kunci API yang disediakan tidak diizinkan untuk mengakses. |
|
403 |
Request denied by Key Auth check. Unauthorized consumer. |
Pemanggil permintaan tidak diotorisasi. |
Referensi
Anda dapat memberikan otorisasi dan mengelola API Anda melalui Authorization management.