0

次の要件に対する私のソリューションについて、フィードバックをお寄せください。

要件 (類似):

1.認証トークンが電子メールと日付から作成され、暗号化されているとしましょう

1.b 認証トークンは、ヘッダーを介してクライアントに送り返されます

1.c 認証トークンはクライアントとサーバーに保存されます

私の解決策:

1) 認証トークンをヘッダー経由でクライアントに送り返す。私はクッキーと次のコードを使用しました。

  HttpCookie cookie = new HttpCookie("AuthenticationToken");
      cookie.Value = "EncryptedToken";
      Response.Cookies.Add(cookie);

2)認証トークンをデータベースに保存し、リクエストごとに、Cookieに保存されたトークンとデータベースに保存されたトークンを比較します。(暗号化、復号化操作が適切に行われていると仮定します)

あなたのフィードバック/コメント?

4

2 に答える 2

1

私にはセキュリティの専門知識がありません。私にはあなたのアイデアは実行可能に聞こえます。

しかし、なぜこのような「カスタム」認証をしたいのか興味がありましたか?Web.APIで行われる「ビルドする」ASP.NET認証を確認しましたか

次に、次のような標準の.netを使用してカスタムHttpOperationHandlerを作成できます。

var ticket = FormsAuthentication.Decrypt(val);
var ident = new FormsIdentity(ticket);
...
var principle = new GenericPrincipal(identity, new string[0]);
Thread.CurrentPrincipal = principle;
...
if (!principal.Identity.IsAuthenticated)
    return false;

また、Thread.CurrentPrincipalとCurrent.Userについて読むこともできます。

長所は、サーバー上のDBに認証トークンを保存し、リクエストごとに取得する必要がないことです。

于 2012-04-08T08:57:36.657 に答える
1

それは私にはOKに見えます。ただし、暗号化していて(復号化できるように)、電子メール(ユーザーを識別)と発行されたタイムトークン(したがって、期限切れかどうかを確認)を見つけることができる場合でも、それをデータベースに保存する必要がありますか? 追跡などの他の要件がある場合にのみ、そうします。

于 2012-04-08T09:04:01.477 に答える