REST API 認証システムを実装しています。
私は基本的にこのサイトで説明されている方法を使用しています:
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
基本的に、リクエストボディを使用してハッシュを作成し、それを実際のリクエストとともにサーバーに送信し、サーバーがそれを再作成して比較します。
詳細については説明しません。重要な部分は、「リプレイ攻撃」を防ぐためにタイムスタンプを使用していることです。
サイトから引用すると、次のように説明されています。
現在のサーバーのタイムスタンプをクライアントが送信したタイムスタンプと比較します。リプレイ攻撃を防ぐために、2 つのタイムスタンプの差が許容可能な制限時間 (5 ~ 15 分程度) 内であることを確認してください。
私が現在直面している問題は、クライアントのクロック設定が変更された場合、クライアントとサーバーの間でタイムスタンプが異なるため、予期しない API 認証エラーが発生する可能性があることです。
これを回避する方法はありませんか?タイムスタンプの使用をあきらめる必要がありますか?
このタイムスタンプの問題の解決策、またはリプレイ攻撃を防ぐことができる他の方法で誰かが私を助けてくれれば、非常に感謝しています。
注:クライアントに nonce を発行することが「リプレイ攻撃」を防ぐ優れた方法であることは認識していますが、nonce-issueing-API と管理するバックエンドを作成する実装コストがかかるため、最後の手段にしたいと考えています。ノンスが大きすぎます。