1

起動時にユーザーがログインする必要があるアプリケーションを構築しています。

認証プロセスは次のとおりです。

  • ユーザーがユーザー名/パスワードを入力します。
  • クライアントはユーザー名とパスワードをWebサービスに送信します。
  • Webサービスは、DBからのハッシュ化されたパスワードを使用してユーザーを認証します。
  • Webサービスは、次の3つの値のいずれかを含むトークンをクライアントに返します。

    1)ユーザー名が無効です。

    2)パスワードが無効です。

    3)ユーザーが認証されます。

  • トークンは、クライアントが次の行動方針を決定するために使用されます。

  • トークンは、クライアントによって行われる後続のすべての呼び出しでサービスに渡されます。ユーザーが認証されていない場合、サービスは呼び出しを拒否します。

トークンは、DataContractであるDTO内にカプセル化されます。トークン自体はDataMemberです。DataMembersでは、プロパティにセッターとゲッターが必要です。これは、クライアントがトークンの値を設定できるようになったことを意味しますが、これは悪いことです。クライアントは、技術的に認証済みとして自分自身にフラグを立てることができるようになりました。

クライアントがトークンの値を変更できないようにするにはどうすればよいですか?ここで私を助けることができるパターンはありますか?

4

1 に答える 1

1

サーバーはトークンを「認識」して検証する必要があります。

クライアントによるトークンの変更を制限する方法はありません。考えてみてください-基本的に情報のバンドルであるDTOを送信します。後で、そのバンドルを私に送り返します。バンドルの内容を変更しないようにするにはどうすればよいですか?私にできることは、バンドルが有効であること、変更する予定のないものが何も変更されていないことなどを確認することだけです。

トークンが単純なauthenticatedフラグである場合、それはちょっとした惨事です。logged in私を信頼したパラメータを受け入れたWebサイトを想像してみてください。あなたはあなたがログインしていることをウェブサーバーに伝え、それはあなたを信じますか?www.visa.com/account.html?account=123456&loggedIn=trueあまり安全ではないようです。

プラットフォームにとらわれない世界では、暗号化を使用して、検証可能な安全なトークンを作成できます。すでにトークンを持っているので、ユーザーを検証する暗号化されたコンテンツをトークンに追加できるかもしれません。クライアントはデータが何であるかを知らず、データを簡単に復号化できません。リクエストごとにトークンをサーバーに返す必要があります。サーバーは、ユーザーが認証されたことを確認するトークンを復号化できます。

もちろん、トークンは期限切れである必要があり、安全で推測できない必要があります。Windowsの世界では、Windows認証、またはロールインされた.NET認証パターンの1つを使用する方が簡単な場合があります。

于 2012-08-19T23:16:00.280 に答える