File di licenza
I file di licenza controllano le licenze software in ambienti disconnessi o protetti, in cui lâapplicazione potrebbe non riuscire a raggiungere il Babel Licensing Service. Puoi creare un file di licenza in due modi:
- offline, con lo strumento da riga di comando
lic, senza alcun servizio; - nel Babel Licensing Service, con Babel Desktop o con lâapplicazione web di Data Center, per poi esportarlo.
Questa pagina mostra come creare un file di licenza e come convalidarlo nella tua applicazione .NET.
Prerequisiti
Il Babel Licensing Service serve solo se crei il file di licenza nel servizio. In quel caso, assicurati che il Babel Licensing Service sia in esecuzione sul tuo server, secondo le istruzioni della sezione Per iniziare. Poi crea un prodotto di test e il relativo modello di licenza seguendo le istruzioni riportate di seguito. Se generi il file di licenza offline con lic, puoi saltare questo passo.
Poi devi scaricare da GitHub il codice sorgente del client per il file di licenza. Questo codice client permette di integrare i file di licenza nella tua applicazione .NET. Usa il comando seguente per clonare il repository:
git clone https://github.com/babelfornet/license-file-console-example.gitQuando crei il file di licenza nel Babel Licensing Service, il file si basa sul relativo modello di licenza.
Creare un file di licenza
Quando generi un file di licenza puoi specificare vari dettagli, come lâintestatario, il prodotto, la data di scadenza, le funzionalitĂ consentite e gli eventuali campi personalizzati della licenza. Il file di licenza è firmato digitalmente per garantirne lâintegritĂ e lâautenticitĂ .
Con Babel Desktop
Per creare un file di licenza con Babel Desktop, segui questi passi:
Connettiti al servizio
Apri Babel Desktop e fai clic sullâicona del profilo del tuo Babel Licensing Service nella barra attivitĂ . Per generare le licenze serve un profilo Test locale con Gestione locale, quindi esegui Babel Desktop sul computer del servizio; per un servizio remoto usa lâapplicazione web o la Management API.
Genera una licenza
Apri la vista Licenze e scegli Genera licenza nella barra degli strumenti.
Seleziona il modello e la chiave di firma
Nel gruppo Modello, seleziona il Modello di licenza (vedi Modelli di licenza) e la Chiave di firma. Se non selezioni una chiave di firma, viene usata quella del modello o del suo prodotto.
Imposta la modalitĂ su File
Nel gruppo Termini, imposta ModalitĂ su File. Per una licenza a file non serve una chiave utente.
Inserisci lâintestatario e i dettagli della licenza
Inserisci i dati dellâintestatario (è obbligatorio il nome dellâintestatario o lâazienda), le date di emissione e di scadenza e i Campi e le FunzionalitĂ necessari.
Salva la licenza
Salva il modulo. Il servizio genera e firma la licenza, che compare nella griglia delle licenze.
Esporta il file di licenza
Seleziona la licenza e scegli Esporta chiave di licenza⌠nella barra degli strumenti. Il file viene salvato nella cartella di esportazione delle licenze configurata nelle impostazioni di Licensing, con lâID della licenza come nome. Per questo esempio rinominalo ClientFile.licenses o ClientFile.lic.
Con lâedizione Data Center puoi anche generare e scaricare la licenza dalla pagina Licenze dellâapplicazione web.
Con la riga di comando lic
Per creare il file di licenza offline, senza il Babel Licensing Service, usa lo strumento da riga di comando lic. Firma la licenza con la stessa chiave che lâapplicazione usa per convalidarla; per questo esempio, il file Keys.snk:
lic ClientFile.dll --keyfile Keys.snk --sign --licensee name="Contoso" --expiredate 365 --feature Pro=1 --output ClientFile.licensesOgni opzione è descritta nel Riferimento della riga di comando.
Ora puoi fornire il file di licenza ai tuoi clienti o usarlo per distribuire la licenza in ambienti disconnessi o protetti, in cui il Babel Licensing Service non è accessibile.
Configurare un client
Per abilitare la convalida della licenza tramite un file di licenza, devi integrare la libreria Babel Licensing nella tua applicazione .NET. La libreria fornisce un insieme di API e metodi che facilitano la convalida della licenza. Referenziando la libreria Babel Licensing e inserendo il codice necessario, ti assicuri che la tua applicazione convalidi correttamente il file di licenza.
Per aprire il progetto console di esempio del file di licenza, segui questi passi:
Individua il progetto di esempio
Vai nella posizione in cui è salvato il progetto di esempio del file di licenza.
Copia il file di licenza
Copia il file di licenza ClientFile.licenses nella cartella del progetto.
Apri la soluzione
Fai doppio clic sul file di soluzione ClientFile.sln per aprirlo nel tuo ambiente di sviluppo integrato (IDE) preferito, per esempio Visual Studio.
Controlla il riferimento alla libreria client
Una volta aperto il progetto, assicurati che il riferimento alla libreria client di Babel Licensing sia corretto. Se il riferimento manca, consulta il paragrafo Componenti client per configurare un repository NuGet locale.
Compila la soluzione
Dopo aver verificato i riferimenti, compila la soluzione selezionando lâopzione âBuildâ o âRebuildâ dal menu dellâIDE.
Esegui lâapplicazione
Quando la soluzione è stata compilata correttamente, puoi eseguire lâapplicazione in configurazione di debug premendo il pulsante âStart Debuggingâ o usando la scorciatoia da tastiera del tuo IDE (per esempio F5 in Visual Studio). Lâapplicazione console di esempio del file di licenza si avvia, convalida il file di licenza e mostra le informazioni sullâintestatario.

Esempio di convalida del file di licenza
Segue il codice sorgente dellâapplicazione client:
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);
}
}Nel costruttore statico della classe Program, il provider di licenze a file viene registrato tramite BabelFileLicenseProvider. Questo provider si occupa di individuare e convalidare il file di licenza per la classe Program. Per impostazione predefinita, il file di licenza deve avere lo stesso nome dellâassembly, con estensione .licenses o .lic.
Estrarre e proteggere la chiave pubblica
Nel codice di esempio, la proprietĂ PublicKey contiene la chiave pubblica necessaria per convalidare la firma della licenza. Ă impostata su un valore specifico estratto dal file Keys.snk.
var rsa = RSASignature.CreateFromKeyFile("Keys.snk");
string publicKey = rsa.ExportKeys(true);Per estrarre la chiave pubblica dal file Keys.snk, il codice usa il metodo RSASignature.CreateFromKeyFile, passando il nome del file come parametro. Questo metodo crea un oggetto RSASignature che rappresenta la coppia di chiavi contenuta nel file Keys.snk. Poi sullâoggetto RSASignature viene chiamato il metodo ExportKeys con il parametro true per esportare la chiave pubblica. Il metodo restituisce la chiave pubblica sotto forma di stringa.
Il file Keys.snk contiene la chiave privata e non deve essere distribuito con lâapplicazione. La chiave privata deve essere custodita in modo sicuro e non deve essere esposta ad accessi non autorizzati.
Usa i file di licenza quando lâapplicazione ha una connessione limitata o assente al Babel Licensing Service. Li generi con Babel Desktop o con la riga di comando lic, e sono facili da distribuire e da spostare tra sistemi. Il file firmato mantiene i termini di licenza sotto il tuo controllo anche offline, e la tua applicazione .NET lo convalida senza contattare il servizio.
Convalida della licenza con un gestore di licenze
Oltre a BabelFileLicenseProvider, Babel Licensing offre metodi alternativi per la convalida della licenza, basati su apposite classi di gestione delle licenze. Queste classi, come XmlLicenseManager e StringLicenseManager, danno flessibilitĂ nel caricamento e nella convalida delle chiavi di licenza, senza dipendere da BabelFileLicenseProvider per trovare il file di licenza.
La classe XmlLicenseManager è pensata per i file di licenza in formato XML. Permette di impostare la chiave pubblica usata per convalidare la firma della licenza e fornisce i metodi per leggere la chiave di licenza da un file XML, convalidarla e ottenere lâoggetto licenza convalidato.
Ecco in dettaglio il frammento di codice:
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);
}La classe StringLicenseManager è unâalternativa che permette di convalidare le chiavi di licenza direttamente da una stringa codificata. Ă utile quando le informazioni della licenza provengono da unâaltra origine, come un database o la risposta di unâAPI.
Entrambe le classi, XmlLicenseManager e StringLicenseManager, offrono modi alternativi di gestire la convalida della licenza e danno flessibilitĂ nel controllo del caricamento e della convalida. Permettono di definire una logica propria per accedere alla chiave di licenza e offrono un mezzo per verificare lâautenticitĂ e lâintegritĂ della licenza con la chiave pubblica specificata.