ライセンスアクティベーション
ライセンスアクティベーションは、ソフトウェアライセンスの配布と使用を管理するために広く使われている方法です。Babel Licensing は、ライセンスアクティベーションを使って、.NET アプリケーションのライセンスを安全に配布し、アクティベートします。このページでは、Babel Desktop を使って Babel Licensing Service 上にライセンスを作成する方法と、Babel Licensing ライブラリを使ってクライアントの .NET アプリケーションでそのライセンスをアクティベートするための設定方法を説明します。
前提条件
Babel Licensing Service でライセンスアクティベーションの機能を使えるようにするには、次の手順に従います。まず、はじめにセクションの説明に従って、Babel Licensing Service がサーバーで稼働していることを確認します。次に、この後の説明を参照して、テスト用の製品と、それに対応するライセンステンプレートを作成します。これが、アクティベーションライセンスを生成するための土台になります。
続いて、ライセンスアクティベーションのクライアントのソースコードを GitHub からダウンロードします。このクライアントコードは、.NET アプリケーションにライセンスアクティベーションの機能を組み込むために使用します。
git clone https://github.com/babelfornet/license-activation-console-example.gitこの例のアクティベーションライセンスを作成するには、Babel Licensing システムで適切なライセンステンプレートを設定しておく必要があります。このテンプレートは、生成するすべてのライセンスのひな形になり、一貫性と正しい構成を保証します。
アクティベーションライセンスの作成
Babel Desktop は Babel Licensing Service に接続し、アプリケーションのライセンスの作成と設定ができます。ライセンスには、ライセンシー、有効期限、許可する機能など、さまざまな詳細を指定できます。さらに、アクティベーション数の上限など、アクティベーションに関する制限も設定できます。
Babel Desktop でアクティベーションライセンスを登録するには、次の手順に従います。
サービスに接続する
Babel Desktop を開き、アクティビティバーで Babel Licensing Service のプロファイルのアイコンをクリックします。ライセンスの生成には「ローカル管理」に設定した「ローカル テスト」プロファイルが必要なため、Babel Desktop はサービスのコンピューターで実行します。リモートのサービスには、Web アプリケーションまたは Management API を使用します。
ライセンスを生成する
「ライセンス」ビューを開き、ツールバーの「ライセンスを生成」を選択します。
テンプレートと署名キーを選択する
「テンプレート」グループで、前の段落で作成したライセンスの「テンプレート」(ライセンステンプレートを参照)と「署名キー」を選択します。署名キーを選択しない場合は、テンプレートのキー、またはその製品のキーが使用されます。
モードをアクティベーションに設定する
「条件」グループで、「モード」を「アクティベーション」に設定します。
アクティベーション数を設定する
「サイト」に、このライセンスで使用できるアクティベーション数を入力します。
ユーザーキーを生成する
「ライセンス情報」グループで、「ユーザー キー」の項目の右端にある「生成」ボタンを押します。このユーザーキーは、特定のコンピューターでライセンスをアクティベートするために使用します。
ライセンシーとライセンスの詳細を入力する
ライセンシーの情報(ライセンシーの名前または会社のいずれかが必須)と、このライセンスに追加する「フィールド」、「機能」、「制限」を入力します。
形式を選択する
ライセンスの「形式」を、「XML」、「XML 署名」、「ASCII」、「Base32」から選択します。
ライセンスを保存する
フォームを保存します。サービスがライセンスを生成し、署名します。
ライセンスの検証に必要な、「Keys.snk」ファイルから抽出した公開キーは、サンプルのソースコードにすでに設定されています。
新しく登録したアクティベーションライセンスは、一意のライセンスキーとその他の関連情報とともに、ライセンスのグリッドに表示されます。Data Center エディションでは、Web アプリケーションの「Licenses」ページでもアクティベーションライセンスを作成できます。
アクティベーションライセンスを登録すると、顧客はユーザーキーと、必要に応じてマシン ID を指定して、自分のコンピューターでライセンスをアクティベートできます。Babel Licensing Service は情報を検証し、そのコンピューターに紐付けられたライセンストークンを発行して、ソフトウェアを実行できるようにします。アクティベーションはそれぞれ、サービスのトークンの上限に対してカウントされます。ライセンストークンを参照してください。
クライアントの設定
Babel Licensing Service でライセンスを作成したら、クライアントの .NET アプリケーションがそのライセンスをアクティベートするように設定する必要があります。そのためには、Babel Licensing ライブラリをアプリケーションに組み込み、ライセンスをアクティベートするために必要なコードを実装します。Babel Licensing ライブラリは、ライセンスアクティベーションのワークフローを効率化し、安全なライセンス検証を保証する一連の API とメソッドを提供します。
ライセンスアクティベーションのサンプルプロジェクトを開くには、次の手順に従います。
ソリューションを開く
ライセンスアクティベーションのサンプルプロジェクトが保存されている場所に移動し、ソリューションファイル「ClientActivation.sln」をダブルクリックして、Visual Studio などの使い慣れた統合開発環境(IDE)で開きます。
クライアントライブラリの参照を確認する
プロジェクトが開いたら、Babel Licensing のクライアントライブラリが正しく参照されていることを確認します。参照がない場合は、クライアントコンポーネントの段落を参照して、ローカルの NuGet リポジトリを設定してください。
ソリューションをビルドする
参照が正しいことを確認したら、IDE のメニューから「Build」または「Rebuild」を選択して、ソリューションをビルドします。
アプリケーションを実行する
ソリューションのビルドに成功したら、「Start Debugging」ボタンを押すか、IDE のキーボードショートカット(Visual Studio では F5 など)を使って、デバッグ構成でアプリケーションを実行できます。ライセンスアクティベーションのサンプルアプリケーションが起動し、ライセンス機能を操作して、ライセンスアクティベーションの処理をテストできます。

ライセンスアクティベーションのコンソール
アクティベーションキーを入力する
ライセンス用に生成されたアクティベーションキーを入力し、ENTER を押します。
アクティベーションキーが有効で、ライセンスに設定されたキーと一致する場合、ライセンスは正常にアクティベートされます。
ここで、ライセンスのアクティベーションを解除するか、「n」を押してアプリケーションを閉じることができます。
アプリケーションを閉じる、またはアクティベーションを解除する
「n」を押してから ENTER を押すと、アプリケーションが閉じます。
アプリケーションを再起動すると、ライセンスが引き続きアクティブであることがわかります。これは、クライアントがライセンス情報のローカルキャッシュを保持するように設定されているためです。クライアントがサーバーに接続してリモートでライセンスを検証するのは、5 日に 1 回だけです。このキャッシュの仕組みにより、サーバーへの接続が一時的に利用できない場合でも、アプリケーションは動作を続けられます。
ライセンスアクティベーションの例の完全なソースコードは次のとおりです。
using Babel.Licensing;
// Create a new configuration object
BabelLicensingConfiguration config = new BabelLicensingConfiguration() {
// Set the service URL
ServiceUrl = "http://localhost:5005",
// Set the public key used to verify the license signature
SignatureProvider = RSASignature.FromKeys("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDE1VRiIdr6fiVZKve7NVgjIvGdRiRx0Mjjm+Yzf6tLbzFnxLs0fat5EoRcubxx0QQQDfydsJBE/fc7cwRWSrE2xK6X4Eb4W8O47pCMjqvTQZfDqQywEZJrLlxpp9hlKz6FDYX4SagrjmP1gdw8olo+n+IBz8ubkNxRhvycikxuDQIDAQAB"),
// Set a unique client ID
ClientId = "my app client id"
};
// Create the client object used to communicate with the server
BabelLicensing client = new BabelLicensing(config);
// Use BabelServiceLicenseProvider to cache a local copy of the license for offline use
BabelServiceLicenseProvider provider = new BabelServiceLicenseProvider(client) {
// Refresh the license by contacting the server every 5 days
// If set to TimeSpan.Zero, the license will be validated every time on the server
LicenseRefreshInterval = TimeSpan.FromDays(5)
};
// Register the license provider with BabelLicenseManager
BabelLicenseManager.RegisterLicenseProvider(typeof(Program), provider);
// Check if the user key was set
if (provider.UserKey == null)
{
// If the user key was not entered, the license has not been activated yet.
// Ask the user to activate the license
Console.WriteLine("Please enter your activation license key: ");
string? userKey = Console.ReadLine();
try
{
await client.ActivateLicenseAsync(userKey, typeof(Program));
Console.WriteLine("License activated.");
}
catch (Exception ex)
{
Console.WriteLine($"Could not activate license: {ex.Message}");
return;
}
}
try
{
// Validate the license
// This will contact the server to validate the license if the local copy is expired
// You can customize the validation interval using the LicenseValidationInterval property
var license = await BabelLicenseManager.ValidateAsync(typeof(Program));
Console.WriteLine($"License {license.Id} valid.");
// Ask to deactivate the license
Console.WriteLine("Do you want to deactivate the license? (y/n)");
string? answer = Console.ReadLine();
if (answer?.ToLower() == "y")
{
try
{
await client.DeactivateLicenseAsync(provider.UserKey);
Console.WriteLine("License deactivated.");
}
catch (Exception ex)
{
Console.WriteLine($"Could not deactivate license: {ex.Message}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"License not valid: {ex.Message}");
return;
}
BabelLicensing クラスをインスタンス化して、ライセンスサーバーと通信します。ライセンスを検証するための公開キーと、サービスと通信するための URL は、サービスの構成で指定します。
次に、BabelServiceLicenseProvider クラスのインスタンスを作成し、BabelLicenseManager に登録します。このプロバイダーは、オフラインで使用するためにライセンスのローカルコピーをキャッシュする役割を持ちます。LicenseRefreshInterval プロパティには、サーバーからライセンスを更新する頻度を設定します。
コードは、ユーザーキー(アクティベーションライセンスキー)が入力済みかどうかを確認します。設定されていない場合、ライセンスはまだアクティベートされていません。
ユーザーキーが設定されていない場合、コードはユーザーにアクティベーションライセンスキーの入力を求め、サーバーに接続してライセンスのアクティベートを試みます。
続いて、コードは BabelLicenseManager の ValidateAsync メソッドを使ってライセンスを検証します。このメソッドはライセンスの有効性を確認し、ライセンスのローカルコピーが期限切れの場合は、サーバーに接続して検証します。
ライセンスの検証後、コードはライセンスのアクティベーションを解除するかどうかをユーザーに尋ねます。ユーザーが解除を選択すると、コードは BabelLicensing クライアントの DeactivateLicenseAsync メソッドを呼び出して、ライセンスのアクティベーションを解除します。
全体として、このコードは、Babel Licensing のクライアントライブラリを使って、クライアントアプリケーションでライセンスのアクティベーション、検証、アクティベーション解除を処理する方法を示しています。
ライセンスアクティベーションには、いくつかの利点があります。たとえば、許可されたユーザーだけがライセンス対象のソフトウェアをアクティベートして使用できるため、セキュリティが向上します。また、ライセンスのアクティベーションを追跡して管理でき、アプリケーションの使用パターンについて有用な情報が得られます。Babel Licensing のライセンスアクティベーション機能を活用することで、ライセンス条件の遵守を確保し、ソフトウェアの配布と使用を管理し続けることができます。
ライセンスアクティベーションを使用するには、Babel Desktop または Web アプリケーションでライセンスを作成し、クライアントアプリケーションがそのライセンスをアクティベートするように設定します。その後は、サービスがライセンス条件の遵守を徹底し、知的財産の保護に役立ちます。