Расширяемые проверки личности в Go с примитивами Didit (RU)
Узнайте, как спроектировать гибкую архитектуру плагинов на Go для пользовательских проверок личности, используя модульные примитивы идентификации Didit.

Модульный дизайн для гибкостиСоздание расширяемой архитектуры плагинов на Go позволяет компаниям быстро адаптироваться к меняющимся нормативным требованиям и новым векторам мошенничества без полной перестройки всей системы верификации личности.
Используйте сильные стороны GoСтрогая типизация Go, производительность и возможности параллелизма делают его идеальным языком для разработки надежных и масштабируемых служб верификации личности, способных обрабатывать большой объем данных.
Компонуемость с примитивами DiditИнтеграция нативных ИИ-примитивов Didit, таких как проверка удостоверения личности, пассивная и активная проверка живости, а также AML-скрининг, предоставляет мощные, готовые компоненты, которые можно использовать в пользовательских плагинах Go.
Подход Didit, ориентированный на разработчиковЧистые API Didit, мгновенная "песочница" и модульная архитектура идеально подходят для разработчиков, создающих расширяемые системы, предлагая бесплатный базовый KYC и отсутствие платы за настройку для ускорения разработки.
Необходимость расширяемой верификации личности
В современном быстро меняющемся цифровом мире верификация личности (IDV) больше не является статичным процессом. Правила меняются, появляются новые методы мошенничества, и потребности бизнеса смещаются. Жесткая, монолитная система IDV быстро становится узким местом, препятствуя инновациям и увеличивая риски соответствия. Вот почему расширяемая архитектура плагинов — это не просто роскошь, а необходимость, особенно для разработчиков, работающих с высокопроизводительными языками, такими как Go.
Расширяемая архитектура позволяет предприятиям динамически добавлять, удалять или изменять проверки личности без повторного развертывания всей службы. Эта гибкость имеет решающее значение для адаптации к региональным требованиям KYC (Знай своего клиента), интеграции передовых механизмов обнаружения мошенничества или экспериментов с новыми потоками регистрации пользователей. Например, компании изначально может потребоваться базовая проверка удостоверения личности и обнаружение живости. Позже им может потребоваться добавить оценку возраста для конкретных продуктов или включить AML-скрининг для финансовых транзакций. Система на основе плагинов легко справляется с этими дополнениями.
Проектирование архитектуры плагинов на Go
Интерфейсно-ориентированный дизайн Go и строгая типизация делают его отличным выбором для создания надежных систем плагинов. Основная идея состоит в том, чтобы определить общий интерфейс, который должны реализовать все «плагины» проверки личности. Этот интерфейс действует как контракт, гарантируя, что любая новая проверка может быть беспрепятственно интегрирована в существующий рабочий процесс.
Определение интерфейса проверки личности
Рассмотрим простой интерфейс для проверки личности:
package main
type IdentityCheckResult struct {
Passed bool
Details string
}
type IdentityChecker interface {
Name() string
Execute(data map[string]interface{}) (IdentityCheckResult, error)
}
Здесь IdentityChecker определяет два метода: Name() для идентификации плагина и Execute() для выполнения фактической проверки, принимающий общие входные данные и возвращающий результат. Эта абстракция позволяет выполнять различные проверки, от верификации документов до биометрического анализа.
Реализация пользовательских проверок с помощью примитивов Didit
Теперь давайте посмотрим, как мы можем реализовать конкретные проверки личности, используя мощные примитивы Didit в этой системе плагинов. Модульная архитектура Didit, чистые API и нативные возможности ИИ упрощают интеграцию этих передовых служб.
Пример: плагин Didit ID Verification
Для проверки личности на основе документов мы можем создать плагин, который использует продукт Didit ID Verification, включающий OCR, MRZ и сканирование штрих-кодов в более чем 220 странах. Этот плагин будет отправлять изображения документов и данные в API Didit и обрабатывать ответ.
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type DiditIDVCheck struct{}
func (d *DiditIDVCheck) Name() string {
return "DiditIDVerification"
}
func (d *DiditIDVCheck) Execute(data map[string]interface{}) (IdentityCheckResult, error) {
documentImage, ok := data["documentImage"].(string)
if !ok {
return IdentityCheckResult{Passed: false, Details: "Missing document image"}, nil
}
// In a real application, you'd send the image to Didit's ID Verification API.
// For this example, we'll simulate a call.
// Documentation: https://docs.didit.me/core-technology/id-verification
// Simulate API call to Didit's ID Verification
// Replace with actual API call and error handling
fmt.Printf("Calling Didit ID Verification for image: %s...\n", documentImage[:20]) // Truncate for display
// Assume a successful response for demonstration
if documentImage != "invalid_id_image" {
return IdentityCheckResult{Passed: true, Details: "ID document verified by Didit."}, nil
} else {
return IdentityCheckResult{Passed: false, Details: "ID document verification failed by Didit." + " Invalid image provided."},
fmt.Errorf("Didit ID Verification failed")
}
}
Пример: плагин Didit Liveness Check
Для борьбы с дипфейками и атаками презентации необходима проверка живости. Didit предлагает как пассивное, так и активное обнаружение живости. Плагин может интегрировать это, обрабатывая короткое видео или серию изображений.
package main
type DiditLivenessCheck struct{}
func (d *DiditLivenessCheck) Name() string {
return "DiditLivenessDetection"
}
func (d *DiditLivenessCheck) Execute(data map[string]interface{}) (IdentityCheckResult, error) {
livenessVideo, ok := data["livenessVideo"].(string)
if !ok {
return IdentityCheckResult{Passed: false, Details: "Missing liveness video"}, nil
}
// Simulate API call to Didit's Liveness Detection
// Replace with actual API call and error handling
fmt.Printf("Calling Didit Liveness Detection for video: %s...\n", livenessVideo[:20])
if livenessVideo != "deepfake_video" {
return IdentityCheckResult{Passed: true, Details: "Liveness detected by Didit."}, nil
} else {
return IdentityCheckResult{Passed: false, Details: "Liveness detection failed by Didit." + " Deepfake detected."},
fmt.Errorf("Didit Liveness Detection failed")
}
}
Оркестрация рабочих процессов с помощью плагинов
Когда у вас есть плагины, вам нужен механизм для их оркестрации в связный рабочий процесс. Оркестрированные рабочие процессы Didit предоставляют для этого визуальный конструктор без кода, но если вы создаете пользовательскую службу Go, вы можете управлять этой логикой программно.
package main
import "fmt"
// A simple orchestrator
type Workflow struct {
Checks []IdentityChecker
}
func (w *Workflow) AddCheck(checker IdentityChecker) {
w.Checks = append(w.Checks, checker)
}
func (w *Workflow) Run(userData map[string]interface{}) ([]IdentityCheckResult, error) {
var results []IdentityCheckResult
for _, check := range w.Checks {
fmt.Printf("\nRunning %s check...\n", check.Name())
res, err := check.Execute(userData)
results = append(results, res)
if err != nil || !res.Passed {
fmt.Printf("Check %s failed: %s\n", check.Name(), res.Details)
return results, fmt.Errorf("workflow failed at %s: %w", check.Name(), err)
}
fmt.Printf("Check %s passed: %s\n", check.Name(), res.Details)
}
return results, nil
}
func main() {
workflow := &Workflow{}
workflow.AddCheck(&DiditIDVCheck{})
workflow.AddCheck(&DiditLivenessCheck{})
// Example user data
userData := map[string]interface{}{
"documentImage": "valid_passport_image_base64",
"livenessVideo": "valid_liveness_video_base64",
"name": "Jane Doe",
}
fmt.Println("--- Running successful workflow ---")
results, err := workflow.Run(userData)
if err != nil {
fmt.Printf("Workflow completed with errors: %v\n", err)
} else {
fmt.Println("Workflow completed successfully!")
}
for _, r := range results {
fmt.Printf("- %s: Passed = %t, Details = %s\n", r.Name, r.Passed, r.Details)
}
// Example of a failing workflow
fmt.Println("\n--- Running failing workflow (invalid ID) ---")
failingUserData := map[string]interface{}{
"documentImage": "invalid_id_image",
"livenessVideo": "valid_liveness_video_base64",
"name": "John Smith",
}
failingResults, err := workflow.Run(failingUserData)
if err != nil {
fmt.Printf("Workflow completed with errors: %v\n", err)
} else {
fmt.Println("Workflow completed successfully!")
}
for _, r := range failingResults {
fmt.Printf("- %s: Passed = %t, Details = %s\n", r.Name, r.Passed, r.Details)
}
}
Этот простой оркестратор выполняет проверки последовательно. В реальном мире вы можете добавить условную логику, параллельное выполнение или повторные попытки, отражая возможности конструктора рабочих процессов Didit без кода.
Дополнительные соображения для архитектур плагинов Go
При создании готовой к производству архитектуры плагинов на Go рассмотрите следующие аспекты:
- Обработка ошибок: Реализуйте надежную обработку ошибок и ведение журнала для каждого плагина.
- Конфигурация: Разрешите динамическую настройку плагинов (например, ключи API, пороговые значения).
- Загрузка плагинов: Для истинной расширяемости без перекомпиляции изучите пакет Go
plugin(хотя у него есть ограничения платформы) или внешние процессы/gRPC для межпроцессного взаимодействия. - Безопасность: Убедитесь, что плагины изолированы или надлежащим образом проверены, чтобы предотвратить выполнение вредоносного кода.
- Поток данных: Определите четкие контракты данных для входов и выходов каждого плагина.
- White-Labeling: Если вы создаете пользовательский интерфейс, помните, что Didit предлагает обширные возможности white-labeling, позволяя настраивать цвета, шрифты, логотипы и даже использовать собственный домен, обеспечивая бесшовный брендированный опыт. Это крайне важно для поддержания доверия пользователей и снижения показателей оттока в процессе верификации.
Как помогает Didit
Didit разработан с нуля именно для такого модульного, расширяемого подхода к интеграции. Будучи нативной ИИ-платформой для идентификации, ориентированной на разработчиков, Didit предоставляет строительные блоки — или «примитивы» — которые могут быть легко интегрированы в вашу архитектуру плагинов Go. Наша модульная архитектура означает, что вы можете выбирать именно те компоненты верификации, которые вам нужны, будь то проверка удостоверения личности, пассивная и активная проверка живости, сопоставление лиц 1:1, AML-скрининг и мониторинг, подтверждение адреса или оценка возраста. Каждый из них может быть отдельным плагином в вашей системе.
Didit выделяется тем, что предлагает бесплатный базовый KYC, позволяя вам начать работу с основными проверками личности без первоначальных затрат. Наши чистые API и исчерпывающая документация, наряду с мгновенной «песочницей», делают интеграцию интуитивно понятной и быстрой. Используя Didit, вы снимаете с себя сложность поддержки сложных моделей ИИ, глобальных баз данных документов и обновлений соответствия, позволяя вашей службе Go сосредоточиться на оркестрации и бизнес-логике. Модель оплаты Didit за успешную проверку и отсутствие платы за настройку дополнительно соответствуют гибкой, масштабируемой архитектуре, гарантируя, что вы платите только за то, что используете.
Готовы начать?
Готовы увидеть Didit в действии? Получите бесплатную демонстрацию сегодня.
Начните бесплатно проверять личности с бесплатным тарифом Didit.