3

通常のフォーム認証に加えて、Thinktecture IdentityModel で設定された Web Api DAL によって提供される API/トークン URL に対して WebClient オブジェクトが基本認証を行うように、フォーム認証ログイン プロセスを変更することは難しくありません。返されたセッション トークンは、後で DAL を呼び出すときに使用するために、セッション ディクショナリに格納できます。

問題は、これらのトークンの寿命が異なることです。

必要に応じてセッション トークンを再作成するために、資格情報を localStorage に保持するようにアプリを書き直すこともできますが、それは見苦しく、セキュリティの観点からは理想的ではありません。

これらのシステムのいずれかまたは両方でトークンの耐久性を構成する方法がある可能性がありますが、使用する検索用語がわかりません (トークンの耐久性とトークンの寿命を検索してみましたが、結果は役に立ちませんでした)。

私は、2 種類の Web アプリケーション セキュリティを最適に調整する方法について、哲学的および実用的な提案に興味があります。何を検索すればよいかを知っていれば、このトピックに関する回答がまだなかったとしたら、非常に驚​​くでしょう。


一部の人々は私が何を求めているのかはっきりしていないので、少し背景を説明します。

フォームベースのセキュリティを使用する、醜い古い学校の ASP.NET Web アプリがあります。

Thinktecture IdentityModel を使用する別の DAL アプリとして新しいものを追加しました。この DAL は、ASP.NET アプリと Durandal SPA の 2 つのアプリで使用されます。

これらは資格証明チェックに同じデータベースを使用するため、同じ ID スペースを持ちます。

古いアプリのログイン プロセスを変更して、資格情報を提示し、Thinktecture IdentityModel からセッション トークンを取得できるようにしました。このトークンは、古いアプリが DAL を呼び出すたびに提示される Session コレクションに入れられます。

古いアプリを起動し、認証し、操作を行ってブラウザーを閉じ、後でブラウザーを再度開くと、ログインせずに ASP.NET アプリにログインしているため、セッション トークンを作成する機会がありません。これが問題です。同じライフサイクルを持つには、2 つのトークンが必要です。


1つの可能なアプローチを考えました。人々がそのメリットについて意見を表明したり、洗練された提案のコメントをしたりできるように、私はそれを答えとして以下に提示しています. 他のアイデアを思いついたら、答えとして投げます。あなたも同じことをしてくれることを願っています.

4

1 に答える 1

0

サーバーでは、セッショントークンを生成するときと、後でASP.NETセッションがそれなしで再作成されるときの両方で、ユーザーIDを知っています。

私が必要としているのは、Cookie に相当するサーバーです。「サーバー側の Cookie」をすばやく検索すると、いくつかの記事が返されました。そのうちの 1 つは、明らかに 1999 年に自分で書いたもので、すべて「データベースの使用」に要約されます。

だから... データベースを使用できます。ユーザー テーブルがあり、列を追加できます。または、UID、SessionToken、CreatedAt の 3 つの列を持つ別のテーブルを作成することもできます。

CreatedAt は、トークンの有効期限が切れているかどうかを判断できる日時であり、期限切れになったときに ASP.NET セッションを期限切れにして、新しいログインを強制することができます。


私はこれのバリエーションを使用することになりました。私の特定のケースでは、UID を使用して、資格情報をユーザー テーブルから取得できます。したがって、トークンと作成時間をセッションに入れ、それ以外は上記のように進めました。セッションにトークンの有効期限が含まれていないか、トークンの有効期限が切れている場合、資格情報を取得してトークンを要求し、トークンと有効期限を更新します。

これはすべて、ダミー (無効な) トークンを返す例外ハンドラーにラップされており、最終的な結果は、同じ耐久性のトークンと同じ動作になります。

永続テーブルを使用していないことに気付くでしょう。このようにして、障害点が少なくなり、データベース スキーマを編集する機能に依存しなくなります。テーブルで状態を管理するコストは、少なくとも新しいトークンを生成するコストと同じくらい高かったでしょう。

于 2015-02-20T00:20:56.270 に答える