DỮ LIỆU PHÁP LÝ MINH HỌA · Dữ liệu giấy phép XXX-YYY đang ở chế độ minh họa. Phải thay bằng hồ sơ chính thức trước khi công bố chính thức.
Mobile-ID · Digital Trust Platform
ISO/IEC 27001:2022Chính sách bảo mậtChính sách dịch vụTrạng thái dịch vụ
DỊCH VỤ TIN CẬY MOBILE-ID

Trung tâm tích hợp

Tích hợp Trusted Delivery qua REST API, webhook ký số, OAuth 2.1, mTLS, AS4/eDelivery và mô hình bằng chứng có cấu trúc.

TIẾP NHẬN NHÀ PHÁT TRIỂN

Từ sandbox đến vận hành chính thức theo bốn bước

Tài sản kỹ thuật trong bản v3 là mẫu triển khai an toàn, không chứa endpoint, secret hoặc chứng thư vận hành chính thức.

01

Đăng ký sandbox

Xác định use case, volume, callback và yêu cầu định danh.

02

Thiết lập bảo mật

OAuth 2.1 client, mTLS, IP chính sách và webhook signing key.

03

Kiểm thử sự kiện

Tiếp nhận gửi, consignment, handover, failure và evidence retrieval.

04

Đánh giá vận hành chính thức

Security review, SLA, DR, capacity và runbook vận hành.

KIẾN TRÚC TÍCH HỢP THAM CHIẾU

Kiến trúc tích hợp tham chiếu

API Gateway và AS4 Gateway cùng kết nối vào lõi giao nhận và Bộ máy bằng chứng, nhưng dùng profile và kiểm soát khác nhau.

Kênh truy cập
Cổng dịch vụWeb / Ứng dụng di động
REST APIOAuth 2.1 / mTLS
AS4eDelivery
Bộ kết nốiERP / DMS / BPM
WebhookSự kiện có chữ ký
Lớp định danh
Định danh người gửiVNeID / eID / OIDC
Định danh người nhậnCá nhân / Pháp nhân
Cơ quan phát hànhQuyền đại diện
Chính sáchIAL / AAL
Chấp thuậnRàng buộc mục đích
Lõi giao nhận
S-ERDSTiếp nhận gửi
Định tuyếnBộ máy chính sách
R-ERDSThông điệp giao nhận
Bàn giaoĐẩy / Kéo
Trạng tháiSự kiện vòng đời
Lớp bằng chứng
Mô hình sự kiệnETSI-aligned
Bộ máy bằng chứngMã băm / siêu dữ liệu
eSealChữ ký dịch vụ
TSAThời gian tin cậy
Kho lưu trữLưu trữ dài hạn
Hạ tầng tin cậy
HSMBảo vệ khóa
PKIChứng thư
OCSP / CRLTrạng thái
Kiểm toánNhật ký phát hiện chỉnh sửa
BCP / DRLiên tục hoạt động
CODE MẪU

Mẫu gọi API có kiểm soát lỗi

Mẫu minh họa validation, timeout, idempotency, retry có giới hạn và không ghi log secret.

curl --request POST https://sandbox.example/v1/consignments \
  --cert client.crt --key client.key \
  --header "Authorization: Bearer ${TOKEN}" \
  --header "Idempotency-Key: 04df..." \
  --header "Content-Type: application/json" \
  --data '{"recipient":{"type":"legal_entity","id":"DEMO-001"},"contentHash":"sha256:...","callbackUrl":"https://client.example/webhooks/delivery"}' 
// Java 21 example: validate input, use idempotency and handle retryable failures.
HttpRequest request = HttpRequest.newBuilder(endpoint)
    .header("Authorization", "Bearer " + token)
    .header("Idempotency-Key", idempotencyKey)
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(payload))
    .build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
if (response.statusCode() == 429 || response.statusCode() >= 500) {
    retryWithExponentialBackoff(request); // bounded, jittered retry
}
if (response.statusCode() / 100 != 2) throw new DeliveryApiException(response.body());
// Node.js: validate, send idempotently, verify the signed webhook separately.
const response = await fetch(endpoint, {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'idempotency-key': key,
             'content-type': 'application/json' },
  body: JSON.stringify(payload),
  signal: AbortSignal.timeout(10_000)
});
if ([429, 500, 502, 503, 504].includes(response.status)) await boundedRetry();
if (!response.ok) throw new Error(`Delivery API ${response.status}`);
# Python: typed validation, timeout and bounded retry.
with httpx.Client(cert=("client.crt", "client.key"), timeout=10.0) as client:
    response = client.post(endpoint, json=payload, headers={
        "Authorization": f"Bearer {token}",
        "Idempotency-Key": idempotency_key,
    })
    if response.status_code in {429, 500, 502, 503, 504}:
        raise RetryableDeliveryError(response.text)
    response.raise_for_status()
    result = response.json()
// .NET: use HttpClientFactory, mTLS handler, timeout and idempotency.
using var request = new HttpRequestMessage(HttpMethod.Post, endpoint);
request.Headers.Authorization = new("Bearer", token);
request.Headers.Add("Idempotency-Key", idempotencyKey);
request.Content = JsonContent.Create(payload);
using var response = await client.SendAsync(request, cancellationToken);
if ((int)response.StatusCode == 429 || (int)response.StatusCode >= 500)
    throw new RetryableDeliveryException(await response.Content.ReadAsStringAsync());
response.EnsureSuccessStatusCode();