本文へ移動
LICENTIVO / INTEGRATION

Rust アプリにライセンス検証を組み込む方法

Rust クレートを Cargo アプリケーションに追加し、型付きコールバックで実際のエクスポートを保護します。ネイティブ コアは、署名された許可、デバイスの認証情報、ハートビート、および同時接続枠を管理します。

Rust 1.77+更新日

1. 製品とライセンスを準備する

ノードロック ライセンスと通常のエクスポート機能から始めます。基本的な認証フローが機能した後でのみ、従量制使用量を追加してください。

デバイス枠は現在のアクティベーション数で計算し、解除すると返却されます。通常ライセンスはオフラインでも枠を使用し、フローティングライセンスはリース満了時にも自動返却されます。

  1. [コンソール] > [製品] から製品 ID をコピーします。その製品の署名公開鍵を開き、すべてのキー ID/公開鍵のペアを初期化コードに貼り付けて、YOUR_PRODUCT_ID、YOUR_KEY_ID、および YOUR_PUBLIC_KEY を置き換えます。迅速な統合により、これらのパブリック コード定数を生成できます。製品構成ファイルは必要ありません。 SDK のデフォルトは https://www.licentivo.com. です
  2. クイック統合で、製品を作成または選択します。ポリシーでエクスポートという名前の機能を有効にし、テスト ライセンスを準備します。

2.SDKをインストールする

アプリのプロジェクトで以下のコマンドを実行するか、ビルド依存関係を追加して SDK 0.11.6 を導入します。パッケージマネージャーが SDK を取得するため、ソース ZIP の取得、手動展開、ローカルソースパスの指定は不要です。

ネイティブ ビルド エラーは通常、C11 または libcurl ヘッダーの欠落、アーキテクチャの不一致、または間違った Windows ターゲットを示します。現在の Windows ネイティブ コアには GNU/MinGW が必要です。 MSVC の承認は保留中です。

Terminal · new Cargo application
cargo new licensed_app
cd licensed_app
cargo add licentivo@=0.11.6
Ubuntu / Debian · native dependencies
sudo apt-get update
sudo apt-get install build-essential libcurl4-openssl-dev libssl-dev pkg-config
Windows x64 · PowerShell · GNU/MinGW
rustup toolchain install stable-x86_64-pc-windows-gnu --profile minimal
$env:LICENTIVO_CURL_ROOT = "C:/path/to/curl-mingw"
$env:PATH = "$env:LICENTIVO_CURL_ROOT/bin;$env:PATH"
cargo +stable-x86_64-pc-windows-gnu build

3. 実際の輸出を保護する

SDK の初期化を、アプリの起動処理または認証処理へ組み込みます。認証画面で顧客のキーを受け取り、製品 ID と信頼する公開鍵を渡し、終了まで同じクライアントを維持してください。実際の業務処理を実行する箇所で run_feature を呼び出し、サンプルのレポート出力処理を自分の業務関数に置き換えます。

Rust 1.77+ · src/main.rs
use licentivo::{Client, Error};
use std::{env, fs};

// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const PRODUCT_ID: &str = "YOUR_PRODUCT_ID";
const TRUSTED_KEYS_JSON: &str = r#"{"YOUR_KEY_ID":"YOUR_PUBLIC_KEY"}"#;
// END LICENTIVO PRODUCT

fn setting(name: &str, fallback: &str) -> String {
    env::var(name).ok().filter(|value| !value.is_empty()).unwrap_or_else(|| fallback.into())
}

fn export_report(path: &str) -> Result<(), Error> {
    // Replace this write with your existing export operation.
    fs::write(path, "A report generated by the licensed application.\n")?;
    Ok(())
}

fn run() -> Result<(), Error> {
    // A GUI supplies the activation input. Later starts use an empty key.
    let mut client = Client::open_product(
        PRODUCT_ID, TRUSTED_KEYS_JSON,
        &setting("LICENTIVO_LICENSE_KEY", ""),
    )?;
    let feature = setting("LICENTIVO_FEATURE", "export");
    let path = setting("LICENTIVO_OUTPUT", "licensed-report.txt");
    if setting("LICENTIVO_METERED", "0") == "1" {
        client.run_metered_feature(&feature, 1, &setting("LICENTIVO_OPERATION_ID", ""), || export_report(&path))?;
    } else {
        client.run_feature(&feature, || export_report(&path))?;
    }
    println!("License OK: {feature} is available\nExport completed: {path}");
    // Real app: keep client alive until shutdown. Drop returns floating seats;
    // do not deactivate a device on a normal application exit.
    Ok(())
}

fn main() {
    if let Err(error) = run() { eprintln!("{error}"); std::process::exit(2); }
}

4. シャットダウンするまでクライアントを存続させます。

このコマンドラインの例は、1 つの操作を実行して終了します。デスクトップ アプリケーションでは、起動時に 1 つのクライアントを開き、エクスポート アクションから機能コールバックを呼び出し、アプリケーションの終了時にのみクライアントを閉じます。

アクティブ化後、その後の起動では LICENTIVO_LICENSE_KEY を空のままにして、同じユーザーとキャッシュの場所にプライベート認証情報を復元できます。その認証情報をユーザーの application-data ディレクトリに保存します。閉じるとハートビートが停止し、同時接続枠が戻ります。通常の終了では、ノードロックされたデバイスが非アクティブ化されるべきではありません。

オフライン アクセスは、ポリシーで許可され、署名された許可が有効な場合にのみ利用できます。期限切れまたは拒否された機能はブロックされたままにする必要があります。従量制課金操作にはネットワーク接続が必要です。

変更可能なクライアントを所有アプリケーションの状態に保ちます。これは送信ですが同期ではありません。同時呼び出しを共有するのではなく、1 つのワーカーに移動します。 Drop はバックグラウンド作業を停止し、同時接続枠を返します。 Close はクライアントを消費します。通常の終了ではデバイスのバインドが保持されます。

5. 実行して結果を確認する

[コンソール] > [製品] から製品 ID をコピーします。その製品の署名公開鍵を開き、すべてのキー ID/公開鍵のペアを初期化コードに貼り付けて、YOUR_PRODUCT_ID、YOUR_KEY_ID、および YOUR_PUBLIC_KEY を置き換えます。迅速な統合により、これらのパブリック コード定数を生成できます。製品構成ファイルは必要ありません。 SDK のデフォルトは https://www.licentivo.com. です

  1. エクスポート アクセス権を持つ有効なライセンスによって licensed-report.txt が作成されることを確認します。
  2. LICENTIVO_LICENSE_KEY をクリアし、同じユーザー アカウントを使用して再度実行します。保存された認証情報が復元されます。
  3. LICENTIVO_FEATURE をライセンスに含まれていない機能に設定し、LICENTIVO_OUTPUT を新しいファイル名に設定します。プログラムは、そのファイルを作成せずに拒否を報告する必要があります。
  4. オフライン再起動は、許可され、期限切れになっていない署名付きの許可を使用してのみテストしてください。バックグラウンド更新エラーの後に失敗した機能チェックをバイパスしないでください。
Windows · PowerShell
$env:LICENTIVO_LICENSE_KEY = 'YOUR_LICENSE_KEY'
cargo +stable-x86_64-pc-windows-gnu run
Linux · Bash
LICENTIVO_LICENSE_KEY=YOUR_LICENSE_KEY cargo run

よくある統合の問題

製品 ID、すべてのキー ID/公開鍵のペア、および顧客のライセンス入力を確認します。公開検証キーは製品に属します。顧客のライセンスと保存されたデバイスの認証情報は別のものです。開発テスト キーやベンダー管理 API キーを配布しないでください。

機能が拒否されました、デバイス制限に達したか、ライセンスが期限切れになりました: コンソールでライセンスとポリシーを検査し、顧客に SDK エラーを表示します。認証が失敗した場合は、エクスポート関数を呼び出してはなりません。

run_feature は機能の利用権を確認します。利用回数制限付きのメソッドは、設定された回数を予約・確定します。実際の業務タスクごとに固定の操作 ID を使い、中断したタスクを復旧する前に、永続化した業務結果を確認してください。

ネイティブ ビルド エラーは通常、C11 または libcurl ヘッダーの欠落、アーキテクチャの不一致、または間違った Windows ターゲットを示します。現在の Windows ネイティブ コアには GNU/MinGW が必要です。 MSVC の承認は保留中です。