2009-05-28 18 views
12

クライアントは従来のASPを使用してWebベースのバックオフィスにログインします。従来のASPとASP.Netの間のログインシステムの共有

私はバックオフィスに新しいASP.Netアプリケーションを作成しました。既存のログインシステムを利用する必要があります。そのため、ログインしたときに再びログインする必要はありません新しいASP.Netアプリで。

ログインとパスワードは、ASP.NetアプリケーションからアクセスできるSQL Serverデータベースにクリアテキストとして保存されます。

これらのシステムを統合する効果的な方法は何でしょうか?

現時点でのベストアイデアは です。私のASP.Netアプリケーションへのリンクでは、ユーザーIDとハッシュパスワード+共通シークレットをクエリ文字列に持つ「ゲートウェイ」ログインページにリンクします。私はこれをデータベースのユーザーのパスワードと比較します...しかし、問題は、このクエリ文字列が傍受されると、実際にユーザー名とパスワードを知らずにasp.netサイトにアクセスすることができるということです。

私はおそらく単純なものを見落としています。

+1

クエリー文字列にハッシュを入れた場合、タイムアウトする必要があります。つまり、期限切れの日付と時刻を追加して送信することもできます。確かに彼らはまだそれを使用することができますが、少なくともそれはタイムアウトします。 – PQW

答えて

9

あなたのアイデアは正しい道にあると思います。

古典的なaspとasp.netは同じセッション状態を共有できないため、一方から他方にログオンするメカニズムが必要です。

私は誰かがログインするときに、そのユーザーのデータベースに保存する一意のGUIDを作成します。あるサイトから別のサイトにジャンプするときは、そのGUIDをクエリ文字列に渡します。それらを別のサイトに自動ログオンしようとすると、そのGUIDを参照して、誰にも接続されているかどうかを確認します。そうであれば、ログインしてください。

このようにして、ユーザーが推測または解読できるものはすべて渡しません。

+0

ASPのデータベースに値を保存し、その値をASP.NETコードで比較する場合は、代わりにログイン状態を示すブール値フラグを保存してください。 – Cerebrus

+1

ポイントは、ある環境から次の環境への自動ログインです。 asp.net側にログインし、ASP側に行く場合。その人が自動的にASP側にいるかどうかを知る方法はありません。この場合、データベースにフラグを設定しても、あなたには役に立ちません。 GUIDを保存すると、GUIDに属する人物を検索し、いずれかの環境に自動的にログオンすることができます。 – AaronS

+0

Downvote ?! WTF? – Kjensen

4

従来のASPシステムはどのようにログイン状態を維持していますか? "ピギーバック"は、これまでのところ、あなたの最良の賭けになるでしょう。

私が取り組んだ従来のASPシステムでは、認証情報を追跡するためにCookieが使用されていました。そのため、これらを読み、アクセスできるデータベースと比較するだけです。


情報はクラシックASPセッションに格納されているように、あなたは新しいモジュールへの「入り口」であるものの古典的なASP側に「ページをリダイレクトする」を追加し、これを書くために引き起こす可能性があります有用なデータをクッキーとして使用したり、スタートページにPOSTをトリガしたりできますか?クッキーやPOSTリクエストを使用することで、誰かがユーザー名/パスワードなしでASP.netサイトにアクセスできるようにするために、URLを「ハイジャック」させる心配が最小限に抑えられます。

+0

彼らはセッションを使用する - それはASPとASP.Netの間で共有することはできません(私が知る限り)。 クッキーを見ると、自分の管理システムにログインすると、「ASPSESSIONxxxxxxxxxxx」というセッションのクッキーが得られます。このクッキーにはナンセンスの「DBHPNPCDKCJHOMHDPFOHEDPA」という文字列が含まれています。 したがって、クッキーにピギーバックすることは疑問に思われません。 – Kjensen

+0

私はRobに同意します。リダイレクト方式はおそらく、.NETがASPサイトのセッション状態を直接チェックすることができないため、最終的には何が終わるのでしょうか。この方法には、異なるドメインで作業する利点もありますが、安全にするのは簡単ではありません。 セキュリティを気にする場合は、サイト間で受け渡されるデータを検証/無効化する方法に非常に注意する必要があります。あなたは、URLを推測したり再生したりしてログインできるシステムになりたくはありません。たとえば、SAMLリダイレクトは、リダイレクトの各側の証明書を使用して、渡されたデータを安全にします。 – JohannesH

+3

ASPとASP.NET間のセッション状態を共有する:http://msdn.microsoft.com/en-us/library/aa479313.aspx –

0

フォームを介して提出することはできませんでしたか?それは、URLで傍受される可能性を排除します。

+3

ポストを傍受/悪用することは、取得するよりわずかに困難ですか? – Kjensen

0

インターセプトが重大な問題である場合は、HTTPS経由でサイトを実行する必要があります。さもなければパスワードによってハッシュされるUserID + Nonceを使用することは相当に強力です。

また、ログインが完了したらGUIDセッションCookieを追加し、そのGUIDをDBテーブルに格納することができます。 ASP.NETはログオンが達成されたかどうかを確認するためにCookieからGUIDを検索できます。テーブルにASPセッションCookie値を含める場合、現在のASPセッションがGUIDの作成時に使用されたものと同じセッションであることを合理的に確認できます。

2

おそらく、DNSキャッシュポイズニングなどによって、MITMタイプの攻撃が心配です。状況に応じて、アプリケーションの境界を越えて渡されるログイントークンに時間制約を追加することで、潜在的な影響を緩和するだけで十分です。

「データベースアプローチのGUID」は、同じ認証データベースを共有する2つのアプリケーション間でユーザーを渡すため、また「パスワードリセットの電子メール」タイプのシナリオでも過去に成功したものです。レコードにGUIDが追加された日付を指定する列を追加し、x分/時間/日未満のGUID認証のみにログインするようにアプリケーションコードを変更することで、これを期限切れにすることができます。他のアプリケーションであなたのアルゴリズムを複製および生成された2つの値を比較し、その後、その後、それをハッシュ..

UserId + [Value representing current time to nearest x minute/hour /day] + Salt 

代替のようなものを連結することで、データベース内の追加のフィールドを避けるためである可能性があります。

一般に、あなたの提案された解決策は問題に適していると思います。確かにそれほど複雑ではありません。

関連する問題