:) plzは私を助けて、
まず我々は我々のアプリケーションからサーバにユーザ名とパスワードを送信します。
サーバーでは、資格情報を認証し、要求トークンと成功フラグの組み合わせである応答を返します。
私たちのアプリケーションでは、成功フラグをチェックします。 trueに設定されている場合は、要求トークンを保存して、サーバーへの次のすべての発信要求に使用します。
サーバーはリクエストを受信すると、データベースをチェックして、ユーザーにこのトークンがあるかどうかを確認します。 これは、最後の要求が行われた時刻をチェックします(ユーザーのログインがタイムアウトした場合に対応するためです)。現在の時間と最後の要求時間の差が設定した制限を超えている場合は、新しいトークンを生成するために新しいログイン要求が必要であることをアプリケーションに応答します。それ以外の場合は、依頼を続行し、結果を返信します。
これは私の職場のサーバー側の人たちがどのように行うのかです。私はクライアント側で作業します。しかし、これは基本的に何が行われます。
編集:トークンについて 基本的にランダムなジェネレータメソッドで生成される32文字の文字列です。したがって、ユーザーがログイン要求を送信し、ログインが成功すると、ジェネレータメソッドを使用してトークンを作成し、そのトークンを現在の日時と共にユーザーの要求トークンとしてサーバーデータベースに格納します。
したがって、ユーザーがサーバーに別の要求を送信すると、まずトークンを取得し、そのトークンを持つユーザーが存在するかどうかを確認します。存在する場合、次のチェックは、これが古い要求トークンであるかどうかを確認することです。そこで、現在の時刻をデータベースに保存された時刻で確認します。要求が制限(Eg 5分)の前に送信された場合、データベースの最後の要求時間を現在の時間で更新し、その結果をクライアントに返します。
この方法では、トークンと最後の要求時刻をチェックすることで、各要求に対して認証を行うことができます。
ユーザーの明示的なログオフが解除されるまで、常にアプリケーションをログオンさせたいとします。その場合、それぞれのリクエスト時間を確認する必要はありません。要求トークンをクライアントデバイスに保存するだけです。ユーザーがサインアウトしたら、クライアントからトークンを削除します。だから彼はトークンがないので、次回にログインする必要があります。このシナリオでユーザー名とパスワードを保存するよりも、クライアントデバイスに要求トークンを保存するためのセキュリティが少し強化されています。
ランダムトークンを生成するための多くの機能があります。
ありがとうございました:) ユーザー認証モデルには他のオプションがありますか?私はすべてのオプションを知りたいです:) –
これは私たちが通常行っていることです。他の人が他の選択肢で答えてくれるかもしれません。認証システムは要件に応じて進化し続ける – blessenm
トークンがどのように機能するかを理解するのを少し助けることができますか?ユーザーがログインするたびにサーバー側でトークンを生成する必要がありますか? –