System.Tether.Manager.TTetheringAdapter.CheckToken
Delphi
function CheckToken(const AManager, Seed, Token: string): Boolean;
C++
bool __fastcall CheckToken(const System::UnicodeString AManager, const System::UnicodeString Seed, const System::UnicodeString Token);
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | protected | System.Tether.Manager.pas System.Tether.Manager.hpp |
System.Tether.Manager | TTetheringAdapter |
説明
指定されたハッシュが、リモート マネージャへの直近の接続でのハッシュと指定されたシードとを連結したもののハッシュと一致すれば、True
を返します。 一致しなければ、False
を返します。
TTetheringNetworkAdapterCommon は、CheckToken を使って、こちらのネットワーク アダプタのマネージャとペアになっていたリモート マネージャのハッシュを検証します。
こちらのネットワーク アダプタのマネージャとリモート ネットワーク アダプタのマネージャとを互いにペア設定できたら、各マネージャのメモリには、相手マネージャの ID と、ペアになっている間に両方のマネージャで共有されるハッシュとが、格納されています。
どこかの時点でこの 2 つのマネージャどうしが接続解除される可能性があります。その後再接続して、リモート ネットワーク アダプタのマネージャがこちらのマネージャと再びペアになろうとしたときに、こちらのマネージャがパスワードで保護されていれば(保護されていなければペア設定は自動的に行われます)、ペア設定操作時に両方のマネージャのパスワードが一致する必要はありません。その代わりに、ネットワーク アダプタは、前回のペア設定操作時に生成され、各マネージャがメモリ内に格納しているハッシュを、次のように確認します。
- こちらのネットワーク アダプタのマネージャがパスワードで保護されている(TTetheringManager.Password が空文字列ではない)場合、こちらのネットワーク アダプタは、リモート ネットワーク アダプタとの接続用にランダム シードを生成します。その後、こちらのネットワーク アダプタは、そのシードをリモート ネットワーク アダプタに送信します。
- リモート ネットワーク アダプタは、2 つのマネージャ間の直近の接続でのハッシュ(両方のマネージャがメモリに保存したもの)とこちらのネットワーク マネージャが送信したシードとを連結したもののハッシュを生成します。その後、リモート ネットワーク アダプタは、そのハッシュをこちらのネットワーク アダプタに送信します。
- こちらのネットワーク アダプタは、2 つのマネージャ間の直近の接続でのハッシュ(両方のマネージャがメモリに保存したもの)とこちらのネットワーク アダプタがリモート ネットワーク アダプタとの接続用に先ほど生成したシードとを連結したもののハッシュを生成します。その後、こちらのネットワーク アダプタは、そのハッシュがリモート ネットワーク アダプタから送信されてきたハッシュと一致するかどうかを確認します。
CheckToken は、この処理の最後のステップを担当します。CheckToken は、AManager
への直近の接続でのハッシュと Seed
とを連結したもののハッシュを生成し、そのハッシュが Token
と一致すれば、True
を返します。2 つのハッシュが一致しなければ、False
を返します。
TTetheringAdapter のサブクラスでは、シードを生成して管理する独自の方法を実装しなければならず、また、CheckToken を使用して、リモート アダプタから受け取ったハッシュを、シードおよび両マネージャ間の直近の接続でのハッシュに照らして検証しなければなりません。
以前のペア設定のハッシュは、デフォルトではメモリ内に格納されます。ペア設定データを永続的に残してアプリケーションを再起動してもペア設定データがリセットされないようにするには、TTetheringCustomStorage のサブクラスを作成し、TTetheringManager.OnRequestStorage イベントのハンドラにマネージャのインスタンスを渡す必要があります。
関連項目
- System.Tether.NetworkAdapter.TTetheringNetworkAdapterCommon
- System.Tether.Manager.TTetheringAdapter.PairManager