コンテンツにスキップ

スクリプト開発 / API認証

「関数 API」によって生成される HTTP API には、さらに API認証を追加設定できます。

現在サポートされている API認証は次のとおりです。

認証タイプ 説明
固定フィールド リクエストの Header、Query、または Body に特定の値を持つフィールドが含まれていることを検証します
HTTP Basic 標準の HTTP Basic 認証(ブラウザーでアクセスするとログインボックスが表示されます)
HTTP Digest 標準の HTTP Digest 認証(ブラウザーでアクセスするとログインボックスが表示されます)
認証関数 自作の関数を認証関数として指定します

ユーザーは「管理 / API認証」で認証設定を追加し、その後「関数 API 設定」で追加した認証設定を指定できます。

セキュリティ要件が高い場合は、必ず HTTPS 方式で API にアクセスしてください

1. 固定フィールド認証

固定フィールド認証は最も簡単な認証方式です。クライアントと DataFlux Func の間で、リクエストのどこか(Header、Query、または Body)に特定のフィールドとフィールド値を含めることを取り決め、呼び出しのたびにこの内容を付与して認証を完了します。

毎回のリクエストで、リクエストヘッダーに x-auth-token="my-auth-token" を含める必要があると取り決めた場合、次のように呼び出すことで認証を完了できます。

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

複数の固定フィールド認証を設定している場合、1つでも一致すれば認証成功と見なされます

Query と Body で認証に使用するフィールドは、認証成功後にシステムが自動的に削除するため、関数には渡されません

2. HTTP Basic / HTTP Digest

ブラウザーが直接サポートしている認証方式です。

この方式で認証する API をブラウザーのアドレスバーから直接アクセスすると、ブラウザーにユーザー名/パスワードの入力ボックスが表示され、入力できます。

プログラムからアクセスする必要がある場合は、次のコードを参照してください。

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

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

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

3. 認証関数

API認証の方式が複雑または特殊な場合(業務システムとの連携が必要な場合など)は、自分で作成した関数を認証関数として指定する方式を選択できます。

認証に使用する関数は引数が不要で、True を返すと認証成功を意味し、それ以外の値を返すかエラーを送出すると認証失敗を意味します。

認証関数では、組み込み変数 _DFF_HTTP_REQUEST を使用してリクエスト関連情報を取得できます:スクリプト開発 / 組み込み変数 / _DFF_HTTP_REQUEST

1
2
3
@DFF.API('認証関数')
def my_auth_func():
    return _DFF_HTTP_REQUEST['headers']['x-auth-token'] == 'my-auth-token'

認証に失敗した場合、返す内容によって APIのレスポンス形式も異なることに注意してください。

1
2
3
@DFF.API('認証関数')
def my_auth_func():
    return False

認証に失敗し、直接 False を返した場合、APIレスポンスボディには具体的なエラー情報は含まれません:

APIレスポンスボディ
 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
}
1
2
3
@DFF.API('認証関数')
def my_auth_func():
    return 'Bad User!'

認証に失敗し、文字列を返した場合、この文字列が detail フィールドとして返されます:

APIレスポンスボディ
 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
}
1
2
3
@DFF.API('認証関数')
def my_auth_func():
    return { 'error': 'Bad User!' }

認証に失敗し、JSON を返した場合、この JSON が detail フィールドとして返されます:

APIレスポンスボディ
 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
}
1
2
3
@DFF.API('認証関数')
def my_auth_func():
    raise Exception('Bad User!')

認証関数がエラーを送出した場合、Func フレームワークのレベルでは、この Exception がビジネスロジックによるものかコード自体のエラーかを認識できないため、汎用のエラーメッセージが detail フィールドとして返されます:

APIレスポンスボディ
 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
}