Lewati ke isi

Pengembangan Skrip / Autentikasi API

Untuk HTTP API yang dihasilkan oleh API Fungsi, autentikasi antarmuka dapat ditambahkan.

Saat ini, autentikasi antarmuka yang didukung adalah sebagai berikut:

Jenis Autentikasi Penjelasan
Bidang Tetap Memverifikasi bahwa Header, Query, atau Body pada permintaan berisi bidang dengan nilai tertentu
HTTP Basic Autentikasi HTTP Basic standar (menampilkan kotak login saat diakses melalui browser)
HTTP Digest Autentikasi HTTP Digest standar (menampilkan kotak login saat diakses melalui browser)
Fungsi Autentikasi Menentukan fungsi yang ditulis sendiri sebagai fungsi autentikasi

Pengguna dapat menambahkan konfigurasi autentikasi di "Manajemen / Autentikasi API", kemudian menentukan konfigurasi autentikasi yang ditambahkan di "Konfigurasi API Fungsi".

Jika memiliki persyaratan keamanan yang tinggi, pastikan untuk mengakses antarmuka melalui HTTPS

1. Autentikasi Bidang Tetap

Autentikasi Bidang Tetap adalah metode autentikasi paling sederhana, yaitu klien dan DataFlux Func sepakat bahwa di suatu tempat pada permintaan (Header, Query, atau Body) harus menyertakan bidang dan nilai bidang tertentu, dan pada setiap pemanggilan, konten ini disertakan untuk menyelesaikan autentikasi.

Misalkan disepakati bahwa pada setiap permintaan, header permintaan harus menyertakan x-auth-token="my-auth-token", maka panggilan dapat dilakukan dengan cara berikut untuk menyelesaikan autentikasi:

Text Only
1
2
GET /api/v1/al/func-api-xxxxx
x-auth-token: my-auth-token

Jika beberapa autentikasi Bidang Tetap dikonfigurasikan, satu kecocokan dianggap telah lulus autentikasi

Untuk bidang yang digunakan untuk autentikasi di Query dan Body, setelah autentikasi berhasil, sistem akan otomatis menghapusnya dan tidak meneruskannya ke fungsi

2. HTTP Basic / HTTP Digest

Metode autentikasi yang didukung langsung oleh browser.

Untuk antarmuka yang menggunakan autentikasi dengan cara ini, saat diakses langsung di bilah alamat browser, browser akan menampilkan kotak nama pengguna/kata sandi untuk diisi oleh pengguna.

Jika perlu mengakses secara terprogram, silakan lihat kode berikut:

Python
1
2
3
4
5
6
7
8
import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth

# Autentikasi HTTP Basic
resp = requests.get(url_1, auth=HTTPBasicAuth('user', 'password'))

# Autentikasi HTTP Digest
resp = requests.get(url_2, auth=HTTPDigestAuth('user', 'password'))

3. Fungsi Autentikasi

Jika metode autentikasi antarmuka rumit atau khusus (misalnya perlu berintegrasi dengan sistem bisnis, dll.), Anda dapat memilih untuk menulis fungsi sendiri untuk melakukan autentikasi.

Fungsi yang digunakan untuk autentikasi tidak memerlukan parameter; mengembalikan True menunjukkan autentikasi berhasil, sedangkan mengembalikan konten lain atau melempar kesalahan menunjukkan kegagalan.

Dalam fungsi autentikasi, Anda dapat menggunakan variabel bawaan _DFF_HTTP_REQUEST untuk mendapatkan informasi terkait permintaan: Pengembangan Skrip / Variabel Bawaan / _DFF_HTTP_REQUEST

Contoh
1
2
3
@DFF.API('Fungsi Autentikasi')
def my_auth_func():
    return _DFF_HTTP_REQUEST['headers']['x-auth-token'] == 'my-auth-token'

Perlu diperhatikan bahwa ketika autentikasi gagal, format respons antarmuka juga akan berbeda tergantung pada konten yang dikembalikan:

Contoh
1
2
3
@DFF.API('Fungsi Autentikasi')
def my_auth_func():
    return False

Saat autentikasi gagal, jika fungsi langsung mengembalikan False, badan respons antarmuka tidak akan menyertakan Informasi kesalahan: spesifik apa pun.

Badan Respons Antarmuka
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
  "ok"     : false,
  "error"  : 401.99,
  "reason" : "EAPIAuth",
  "message": "Func Auth failed",
  "detail" : false,
  "status" : 401,
  "reqDump": {
    "method": "GET",
    "url"   : "http://localdev:8089/api/v1/func-api/xxxxx/s"
  },
  "traceId"   : "TRACE-XXXXX",
  "clientTime": null,
  "reqTime"   : "2025-08-14T11:03:45.238Z",
  "respTime"  : "2025-08-14T11:03:45.406Z",
  "reqCost"   : 168
}
Contoh
1
2
3
@DFF.API('Fungsi Autentikasi')
def my_auth_func():
    return 'Bad User!'

Saat autentikasi gagal, jika fungsi mengembalikan string, string tersebut akan dikembalikan sebagai bidang detail:

Badan Respons Antarmuka
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
  "ok"     : false,
  "error"  : 401.99,
  "reason" : "EAPIAuth",
  "message": "Func Auth failed",
  "detail" : "Bad User!",
  "status" : 401,
  "reqDump": {
    "method": "GET",
    "url"   : "http://localdev:8089/api/v1/func-api/xxxxx/s"
  },
  "traceId"   : "TRACE-XXXXX",
  "clientTime": null,
  "reqTime"   : "2025-08-14T11:03:45.238Z",
  "respTime"  : "2025-08-14T11:03:45.406Z",
  "reqCost"   : 168
}
Contoh
1
2
3
@DFF.API('Fungsi Autentikasi')
def my_auth_func():
    return { 'error': 'Bad User!' }

Saat autentikasi gagal, jika fungsi mengembalikan JSON, JSON tersebut akan dikembalikan sebagai bidang detail:

Badan Respons Antarmuka
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
  "ok"     : false,
  "error"  : 401.99,
  "reason" : "EAPIAuth",
  "message": "Func Auth failed",
  "detail": {
    "error": "Bad User!"
  },
  "status": 401,
  "reqDump": {
    "method": "GET",
    "url"   : "http://localdev:8089/api/v1/func-api/xxxxx/s"
  },
  "traceId"   : "TRACE-XXXXX",
  "clientTime": null,
  "reqTime"   : "2025-08-14T11:03:45.238Z",
  "respTime"  : "2025-08-14T11:03:45.406Z",
  "reqCost"   : 168
}
Contoh
1
2
3
@DFF.API('Fungsi Autentikasi')
def my_auth_func():
    raise Exception('Bad User!')

Ketika fungsi autentikasi melempar kesalahan, karena di tingkat kerangka Func tidak dapat mengetahui apakah Exception ini berasal dari logika bisnis atau kesalahan pada kode itu sendiri, maka akan mengembalikan informasi kesalahan umum sebagai bidang detail:

Badan Respons Antarmuka
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "ok": false,
  "error": 401.99,
  "reason": "EAPIAuth",
  "message": "Func Auth failed",
  "detail": {
    "name"               : "Func.Runner",
    "id"                 : "task-RWLH3EuCRfYl",
    "triggerTime"        : 1755170213.119,
    "startTime"          : 1755170213.122,
    "endTime"            : 1755170213.13,
    "status"             : "failure",
    "exceptionType"      : "UserScriptException",
    "exception"          : "In User Script: Exception('Bad User!')",
    "exceptionFrom"      : "userScript",
    "originExceptionType": "Exception",
    "originException"    : "Exception('Bad User!')"
  },
  "status": 401,
  "reqDump": {
    "method": "GET",
    "url"   : "http://localdev:8089/api/v1/func-api/xxxxx/s"
  },
  "traceId"   : "TRACE-XXXXX",
  "clientTime": null,
  "reqTime"   : "2025-08-14T11:03:45.238Z",
  "respTime"  : "2025-08-14T11:03:45.406Z",
  "reqCost"   : 168
}