以下に示すように、データベースにいくつかのテーブルを実装します。
次のエンティティがあります: User、License、およびDevice
そして、これらのエンティティは、上に示したように互いに関連付けられます。すべてのライセンスには、ライセンスを取得したデバイスの数量に関する情報が含まれています。
デバイスがサービスに接続すると、サービスは、接続時にデバイスから送信される ID によってデバイスを認識します。次に、デバイスが登録されているか、このデバイスに関連するライセンスを確認できます。
デバイス数の制限は、デバイス登録時に確認されます。
ユーザーがデバイスを登録する (テーブルに情報を追加する:Devices
および) 場合、コードは、このライセンスで既に登録されているデバイスの数をテーブルのフィールド値LicensedDevices
と照合する必要があります。devicesQty
Licenses
devicesQty
値がさらにデバイスを追加できる場合、コードは新しいデバイスをデータベースに追加します。
アップデート:
ライセンスされたデバイスの数を制御するには、これらのデバイスを登録する必要があります (たとえば、これらのデバイスの一意の ID を使用して)。そうしないと、サービスを使用しているデバイスの数を制御できません。
あるデバイスが接続、動作、切断し、次に別のデバイス、さらに別のデバイスというように続きます。この場合、どのように数量を制御できますか? これらのデバイスのIDを登録しないと仕方がないと思います。
また、ユーザーが自分のデバイスを新しいものに変更した場合は、登録済みデバイスに関する情報を更新する手順が必要です。
顧客が Web ブラウザーのみを使用してサービスを使用している場合、ライセンス/デバイスを制御する唯一の方法は、ユーザー ID + パスワード + デバイス ID をライセンスにバインドすることです。そして、web-service/web-server へのログイン時にこの情報を確認してください。
モバイル デバイスでネイティブ アプリケーションを使用して Web サービスに接続している場合は、より洗練された方法があります。
非対称暗号化アプローチによるライセンス キーの生成/検証を実装します。
ユーザーごとに公開鍵と秘密鍵を生成します。次に、秘密鍵をデータベースに保存し、誰にも見せないでください。
あなたの公開鍵がABC-123-456だとしましょう
Base64 アルゴリズムを使用して、公開鍵のバイトを英数字に変換します。
次に、ライセンスを販売する際に、任意の一意のライセンス コードを生成します。
あなたのライセンスコードがXYZ-789-012だとしましょう
また、エンドユーザーに公開鍵とライセンス コードを提供します: ABC-123-456およびXYZ-789-012
ユーザーは公開キーとライセンス コードをカスタム モバイル アプリケーション設定に設定します。そして、このアプリケーションは、この公開鍵ですべての送信データを暗号化します。また、ライセンス コードは、データ パッケージを暗号化する前に同梱されています。
サーバーがデバイスからデータを受信すると、deviceId によって適切なユーザーを見つけ、次にデータ パッケージを復号化するための適切な秘密鍵を見つけます。そして、このデータ パッケージの正確性を検査します。