TL; DRサブスクリプションが終了するとアクセスを取り消す、オンプレムアプリケーションの気密なライセンス管理システムをどのように構築しますか?
前提
私はこのアプリケーションをPythonで構築しています。これはクライアントの前提でデプロイする必要があります。このアプリケーションは、統計を吐き出すサービスのように常に実行されます。このアプリケーションはサブスクリプションモデルに基づいています。
考慮事項
質問
醜い方法の1つは、timer.txtを暗号化して保存することです。これは、別のpythonプロセスによって常に更新されます。より良い方法はありますか?
上記はインターネットを考慮していない
ただし、インターネットが存在していても、ネットワークを監視でき、APIへの呼び出しを同じ名前のローカルサービスにリダイレクトできるため、間違いのないソリューションを保証するものではありません。これは、双方向SSLが必要であることを意味しますか?
ライセンス交付が難しいのは、ライセンス交付を実施するサードパーティ製品がある理由の1つです。この質問のコンテキストでは、ライセンスenforcementについて話しているだけです。 「気密」とはどういう意味か、およびプライベートネットワークでのライセンス強制をサポートするかどうかを定義する必要があります。
Pythonベースのアプリケーションを実行すると、pythonバイトコードが簡単に分解され、強制コードが切断される可能性があるため、すでに不利になっています。適切なソリューションをレイヤーに実装する必要があることを確認します。
Per Userライセンスでは、実行中のユーザーアカウントのみがライセンスの付与と照合されます。
マシンごとのライセンスは、実行中のマシンのみを検証します。これは、PCが非常にモジュール化されている場合は難しい場合があります。
ユーザーごと/マシンごとは、ユーザーとマシンの組み合わせがライセンス付与に対して正しいことを確認する必要があります。同じマシン上の別のユーザーが新しい許可を必要とするのと同じように、別のマシン上の同じユーザーは新しい許可を必要とします。
一部のシナリオ(Microsoft製品など)では、製品IDと有効期限をエンコードするトークンが必要です。トークンが存在するだけで、製品が使用可能になります。
一部のアプリケーションプロバイダーは、中央サーバーに送信される識別子トークンを作成するライセンストークン(RedGateなど)に署名することを望んでおり、そのサーバーは有効期限のある署名済みトークンを送り返します。交換にはサーバーへのアクティブな接続が必要なため、切断されたネットワーク上のユーザーに対して特別な準備を行う必要があります。つまりユーザーは、トークンをファイルとしてプライベートネットワークからパブリックネットワークにコピーし、手動でアップロードして、署名済みトークンをプライベートネットワークにコピーできるようにする必要があります。
一般的な概念は同じです。ライセンス実施(またはDRM)の堅牢性は、そのライセンストークンがどのように生成および検証されるかに依存します。安全なトークンの主な要素は次のとおりです。
次のことを検討する必要があります。
私はあなたがあなたが「気密」よりも少ない解決策を必要とすることを見つけるであろうと確信しています。既存のDRMツールを調べて、この問題に大規模なエンジニアリングの労力を費やさないように組み込むことができるかどうかを確認する価値があるかもしれません。