ライセンスファイル
ライセンスファイルは、アプリケーションが Babel Licensing Service に接続できない可能性がある、ネットワークから切り離された環境や保護された環境で、ソフトウェアライセンスを管理します。ライセンスファイルは、次の 2 つの方法で作成できます。
- オフラインで、サービスを使わずに
licコマンドラインツールで作成する。 - Babel Licensing Service 上で、Babel Desktop または Data Center の Web アプリケーションを使って作成し、エクスポートする。
このページでは、ライセンスファイルを作成する方法と、.NET アプリケーションで検証する方法を説明します。
前提条件
Babel Licensing Service が必要なのは、ライセンスファイルをサービス上で作成する場合だけです。その場合は、はじめにセクションの説明に従って、Babel Licensing Service がサーバーで稼働していることを確認します。次に、この後の説明を参照して、テスト用の製品と、それに対応するライセンステンプレートを作成します。lic を使ってオフラインでライセンスファイルを生成する場合、この手順は省略できます。
続いて、ライセンスファイルのクライアントのソースコードを GitHub からダウンロードします。このクライアントコードを使うと、.NET アプリケーションにライセンスファイルの機能を組み込めます。次のコマンドでリポジトリをクローンします。
git clone https://github.com/babelfornet/license-file-console-example.gitBabel Licensing Service 上でライセンスファイルを作成する場合、ライセンスファイルは対応するライセンステンプレートを基に作成されます。
ライセンスファイルの作成
ライセンスファイルを生成するときは、ライセンシー、製品、有効期限、許可する機能、ライセンスのカスタムフィールドなど、さまざまな詳細を指定できます。ライセンスファイルは、整合性と真正性を保証するためにデジタル署名されます。
Babel Desktop を使用する場合
Babel Desktop でライセンスファイルを作成するには、次の手順に従います。
サービスに接続する
Babel Desktop を開き、アクティビティバーで Babel Licensing Service のプロファイルのアイコンをクリックします。ライセンスの生成には「ローカル管理」に設定した「ローカル テスト」プロファイルが必要なため、Babel Desktop はサービスのコンピューターで実行します。リモートのサービスには、Web アプリケーションまたは Management API を使用します。
ライセンスを生成する
「ライセンス」ビューを開き、ツールバーの「ライセンスを生成」を選択します。
テンプレートと署名キーを選択する
「テンプレート」グループで、ライセンスの「テンプレート」(ライセンステンプレートを参照)と「署名キー」を選択します。署名キーを選択しない場合は、テンプレートのキー、またはその製品のキーが使用されます。
モードをファイルに設定する
「条件」グループで、「モード」を「ファイル」に設定します。ファイルライセンスにユーザーキーは必要ありません。
ライセンシーとライセンスの詳細を入力する
ライセンシーの情報(ライセンシーの名前または会社のいずれかが必須)、発行日と有効期限、必要な「フィールド」と「機能」を入力します。
ライセンスを保存する
フォームを保存します。サービスがライセンスを生成して署名し、ライセンスがライセンスのグリッドに表示されます。
ライセンスファイルをエクスポートする
ライセンスを選択し、ツールバーの「ライセンス キーをエクスポート…」を選択します。ファイルは、ライセンス管理の設定で指定したライセンスのエクスポート先フォルダーに、ライセンス ID を名前として保存されます。この例では、ファイル名を「ClientFile.licenses」または「ClientFile.lic」に変更します。
Data Center エディションでは、Web アプリケーションの「Licenses」ページでもライセンスを生成してダウンロードできます。
lic コマンドラインを使用する場合
Babel Licensing Service を使わずにオフラインでライセンスファイルを作成するには、lic コマンドラインツールを使用します。ライセンスには、アプリケーションが検証に使用するのと同じキーで署名します。この例では「Keys.snk」ファイルです。
lic ClientFile.dll --keyfile Keys.snk --sign --licensee name="Contoso" --expiredate 365 --feature Pro=1 --output ClientFile.licensesすべてのオプションはリファレンスで説明しています。
これで、ライセンスファイルを顧客に配布したり、Babel Licensing Service にアクセスできない、ネットワークから切り離された環境や保護された環境にライセンスを導入したりできます。
クライアントの設定
ライセンスファイルによるライセンス検証を有効にするには、Babel Licensing ライブラリを .NET アプリケーションに組み込む必要があります。このライブラリは、ライセンス検証の処理を支援する一連の API とメソッドを提供します。Babel Licensing ライブラリを参照し、必要なコードを組み込むことで、アプリケーションがライセンスファイルを正しく検証するようになります。
ライセンスファイルのコンソールサンプルプロジェクトを開くには、次の手順に従います。
サンプルプロジェクトの場所に移動する
ライセンスファイルのサンプルプロジェクトが保存されている場所に移動します。
ライセンスファイルをコピーする
ライセンスファイル「ClientFile.licenses」をプロジェクトフォルダーにコピーします。
ソリューションを開く
ソリューションファイル「ClientFile.sln」をダブルクリックして、Visual Studio などの使い慣れた統合開発環境(IDE)で開きます。
クライアントライブラリの参照を確認する
プロジェクトが開いたら、Babel Licensing のクライアントライブラリが正しく参照されていることを確認します。参照がない場合は、クライアントコンポーネントの段落を参照して、ローカルの NuGet リポジトリを設定してください。
ソリューションをビルドする
参照が正しいことを確認したら、IDE のメニューから「Build」または「Rebuild」を選択して、ソリューションをビルドします。
アプリケーションを実行する
ソリューションのビルドに成功したら、「Start Debugging」ボタンを押すか、IDE のキーボードショートカット(Visual Studio では F5 など)を使って、デバッグ構成でアプリケーションを実行できます。ライセンスファイルのコンソールサンプルアプリケーションが起動し、ライセンスファイルを検証して、ライセンシーの情報を表示します。

ライセンスファイルの検証の例
クライアントアプリケーションのソースコードは次のとおりです。
using System;
using Babel.Licensing;
class Program
{
/// <summary>
/// Public key used to validate the license signature.
/// </summary>
static string PublicKey => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDE1VRiIdr6fiVZKve7NVgjIvGdRiRx0Mjjm+Yzf6tLbzFnxLs0fat5EoRcubxx0QQQDfydsJBE/fc7cwRWSrE2xK6X4Eb4W8O47pCMjqvTQZfDqQywEZJrLlxpp9hlKz6FDYX4SagrjmP1gdw8olo+n+IBz8ubkNxRhvycikxuDQIDAQAB";
static Program()
{
// Register the file license provider for the Program class
// that will be used by the BabelLicenseManager to locate the license file.
// The license file should be named as the assembly name with .licenses extension.
BabelFileLicenseProvider provider = new BabelFileLicenseProvider();
// Sets the public key used to validate the license signature
provider.SignatureProvider = RSASignature.FromKeys(PublicKey);
// Uncomment the following line to customize the license file path
// provider.LicenseFilePath = "license.xml";
// Register the provider for the Program class
BabelLicenseManager.RegisterLicenseProvider(typeof(Program), provider);
}
static void Main(string[] args)
{
var program = new Program();
try
{
var license = program.ValidateLicense();
Console.WriteLine($"License {license.Id} registered to {license.Licensee?.Company}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
public ILicense ValidateLicense()
{
// Uses the registered file license provider for Program class
return BabelLicenseManager.Validate(typeof(Program), this);
}
}Program クラスの静的コンストラクターの中で、BabelFileLicenseProvider を使ってファイルライセンスプロバイダーを登録します。このプロバイダーは、Program クラスのライセンスファイルを見つけて検証する役割を持ちます。既定では、ライセンスファイルの名前はアセンブリと同じで、拡張子は .licenses または .lic である必要があります。
公開キーの抽出と保護
このコードでは、PublicKey プロパティが、ライセンスの署名の検証に必要な公開キーを保持します。このプロパティには、Keys.snk ファイルから抽出した値が設定されています。
var rsa = RSASignature.CreateFromKeyFile("Keys.snk");
string publicKey = rsa.ExportKeys(true);Keys.snk ファイルから公開キーを抽出するために、コードはファイル名をパラメーターとして渡して RSASignature.CreateFromKeyFile メソッドを呼び出します。このメソッドは、Keys.snk ファイルに格納されているキーペアを表す RSASignature オブジェクトを作成します。次に、この RSASignature オブジェクトの ExportKeys メソッドをパラメーター true で呼び出して、公開キーをエクスポートします。このメソッドは、公開キーの文字列表現を返します。
Keys.snk ファイルには秘密キーが含まれているため、アプリケーションと一緒に配布してはいけません。秘密キーは安全に保管し、不正なアクセスにさらされないようにする必要があります。
ライセンスファイルは、アプリケーションが Babel Licensing Service にまったく接続できない場合や、限られた範囲でしか接続できない場合に使用します。Babel Desktop または lic コマンドラインで生成でき、導入もシステム間の移動も簡単です。署名されたファイルにより、オフラインでもライセンスの条件を管理でき、.NET アプリケーションはサービスに接続せずにファイルを検証します。
ライセンスマネージャーによるライセンスの検証
Babel Licensing には、BabelFileLicenseProvider のほかに、専用のライセンスマネージャークラスを使ってライセンスを検証する方法もあります。XmlLicenseManager や StringLicenseManager などのクラスを使うと、ライセンスファイルの検索を BabelFileLicenseProvider に任せずに、ライセンスキーの読み込みと検証を柔軟に処理できます。
XmlLicenseManager クラスは、XML ベースのライセンスファイルを扱うためのものです。ライセンスの署名の検証に使用する公開キーを設定でき、XML ファイルからライセンスキーを読み取り、検証し、検証済みのライセンスオブジェクトを取得するメソッドを提供します。
次のコードは、この処理を詳しく示したものです。
public ILicense ValidateLicenseWithXmlLicenseManager()
{
// Uses the Xml license manager
XmlLicenseManager manager = new XmlLicenseManager();
// Sets the public key used to validate the license signature
manager.SignatureProvider = RSASignature.FromKeys(PublicKey);
// Reads the license from the license file
string licenseKey = File.ReadAllText("ClientFile.lic");
// Validates the license
return manager.Validate(licenseKey, typeof(Program), this);
}StringLicenseManager クラスはもう 1 つの選択肢で、エンコードされた文字列からライセンスキーを直接検証できます。これは、ライセンス情報をデータベースや API の応答など、別のソースから取得する場合に役立ちます。
XmlLicenseManager クラスと StringLicenseManager クラスはどちらも、ライセンスの検証を処理する別の方法であり、読み込みと検証の処理を柔軟に制御できます。ライセンスキーにアクセスするための独自のロジックを定義でき、指定した公開キーを使ってライセンスの真正性と整合性を検証する手段を提供します。