API認証、ワンタイムトークンVSダイナミックトークン
私たちは新しいプロジェクトに取り組んでおり、2人の主任開発者であり、トークンを使用してサーバーとクライアント間の通信を保護する方法の岐路に立っています。 最初の提案:(ワンタイムトークンAKAスタティックトークン) クライアントは、ユーザー名とパスワード、およびcurrent_time(この変数はサーバーのデータベースとクライアント側にも保存されます)をAPIに送信することによってプライマリトークンを要求し、サーバーは入力を解釈し、ハッシュトークンをレンダリングします(例: 58f52c075aca5d3e07869598c4d66648)はデータベースに保存し、クライアントに返します。 クライアントはプライマリトークンを保存し、プライマリトークン+認証要求で送信されたcurrent_time変数を使用して新しいハッシュトークンを作成します(この新しいトークンmain_tokenを呼び出します)。また、サーバーも同じことを行い、同じアルゴリズムを使用して同じトークンを作成します。 クライアントがサーバーAPIを照会するたびに、main_tokenをサーバーに送信します。サーバーは、その中で生成されたトークンをクライアントが送信したmain_tokenと比較します。一致する場合、ユーザーは本物であることを意味します。 2番目の提案:(動的トークン) クライアントは2つのランダムキーを生成します($ key1 = rand(10000,90000); $ key2 = rand(10000,90000);)APIの各リクエストで、クライアントはクエリタイプを使用してハッシュを作成し、複雑なアルゴリズム、およびこれらの2つのキー+ハッシュをサーバーに送信します サーバーは、クライアントで使用されるものと同じアルゴリズムを使用してハッシュを作成し、クライアントが送信したものと比較します。一致する場合、サーバーはクエリの処理に進みます さて、質問は、APIリクエストを保護するために使用する最も論理的で安全な方法はどれですか?