2009-08-10 10 views
2

見た目は答えを見つけることができません。タイトルが何であるべきか正確にはわからない。 "箱の外"からのいくつかの提案を期待しています。私はこれに直面している唯一の人ではないと思う。外部のWebサイトからASP.NET "ログオン"

"どのようにASP.NETアプリケーションが「Webサイトでユーザー権限が既に実行されている」と受け入れることができますか?

独自のASP.NET(2.0)アプリケーションがあります。 FBAまたはWindows認証のいずれかをサポートしています。さらに、「非Windows」ログオン用の独自の「username + password」テーブルがあります。今では、イントラネット+ Windowsログオンを利用して自分のユーザーを自分のWebサイトに埋め込み、自分の外部インターネットユーザーがアクセスできるようにする方法を顧客から求められています。

必要条件は、(外部の)顧客がいくつかのユーザー名+パスワード認証で「メンバーサイト領域」にログオンすることです。彼らは私たちのページに "透過的に"アクセスしたいと思っています。とりわけ、エンドユーザは任意のユーザ名+パスワードを補充する必要はありません。単に、渡されたユーザ名を「受け入れる」方法が必要です。 サイトが自分の認証の方法で何を持っているかを知る方法がありません;彼ら自身のサイトは、例えばASPに書かれているかもしれません。そして、彼らは何かを変えるために少しの努力をしたいと思うでしょう。

だから私はこれにどのようにアプローチしますか?私は何も頑丈なものではないことを認識している顧客はそれを期待しませんが、最小限のものを期待します。たとえば、「私のアプリに?username = ...を付けてアプリにURLを埋め込む」と言えば、外部から知っている人は誰でも自分のアプリで認証されることなくアプリに入る可能性があります。 URLにパスワードを入力することはほとんど役に立ちません...これに対処するためのアドバイスはありますか?または、単に「ユーザーがあなたのアプリに直接アクセスできないように、Webページへのアクセスが確実に保護されている」ことを確認します。

これはあまりにも長くないと思っています。私はそれが漠然とした領域であることを知っています、どんな提案も高く評価されます。

+0

私が思っていることの嫌悪感を試してみましょう。 1.ウェブサイトには「メンバーエリア」があり、ユーザー名+パスワードをデータベースで検索して認証します。 2.ウェブサイトには、投稿を許可するバイインドメッセージボード(ソースあり)があります。 3.アーキテクチャは、members-area(1)が環境変数/ Sessionを介してusername(+多分password)をmessage-board(2)に渡すというものです。 私は(1)自分のウェブサイトであり、(2)私たちのASP.NETアプリケーションであることを希望します。しかし、異なるアプリケーション/セッション。 –

答えて

0

しかし、私はASP.NET Membershipフレームワークを利用し、独自のメンバシッププロバイダを作成して認証スキームとやりとりすることを推奨しますが、設計されていますが、URLだけではセキュリティでは不十分だと推測しています立場。

1

警告::これはおそらく言うまでもありませんが、これは長くて難しいと思います。あなたが与えたパラメータを使用すると、あなたのシステム全体を突き止めるのに不思議な人にまで、システム全体を開くリスクを冒すことになります。私はあなたのデータの性質がどれほど敏感であるかはわかりませんが、それは1つの違反と怒っている顧客であり、あなたは熱い水の中にいる可能性があります。

あなたの顧客に多くの作業を依頼するつもりがない場合は、オプションがかなり制限されます。

スペクトルの非常に安いところでは、おそらくサイトのページにリンクして、何らかの種類のsiteIdとユーザー名をクエリ文字列に渡すように要求することができます。参照URL(www.yourcustomersite.com)は、あなたが最後に使用しているテーブルのsiteIdと一致します。

この欠点は、リフェレーターがスプーフィングされる可能性があるため、非常に簡単な解決策ではなく、何もないことより優れていることです。

お客様にわずかな作業をさせることができれば、少なくとも各ユーザーの固有の認証トークンを提供し、ユーザー名の代わりにトークンを送信する必要があります。あなたはそれを得るかもしれない?siteId = yourCustomer &ユーザー名の代わりにauthToken = DKDlas29df9aa01sk

また、それほど良くはありませんが、少なくともブルートフォース攻撃は、それほど難しくありません。

これが役に立ちます。がんばろう!

+0

私は100%クリアされていない可能性があります。当社のウェブサイトは*関与していません*。顧客が私たちのASP.NETアプリを購入したのは、彼らのウェブサイトでのみ実行され、私たちにリンクする機会はありません。どんな解決策でも私たちのWebアプリケーションを変更して、何らかのユーザーが既にシステムによって承認されていることを受け入れるようにする必要があります。デコードできるトークンがどのように生成されるか、あるいはその逆のことがわかりません。 –

1

チケットを受け取りましたか? Webサービスを実装し、Webアプリケーションにログインするユーザーのチケットを発行することに興味がありますか。ユーザーがあなたのWebアプリケーションを訪問すると、チケットをチェックすることができます(実際にはWebサービスを使用して検証します)...クライアントのブラウザがチケットを保存する方法について少し問題があります...

一方私はOpenIDを使用しているユーザーのstackoverflowログを参照してください...(ユーザーは資格情報を2回入力する必要がありますが、同じアカウントを使用します)これで十分でしょうか?

+0

彼らはそれをやりたいとは思わないでしょう。 私は100%明確ではないかもしれません。当社のウェブサイトは*関与していません*。顧客が私たちのASP.NETアプリを購入したのは、彼らのウェブサイトでのみ実行され、私たちにリンクする機会はありません。どんな解決策でも私たちのWebアプリケーションを変更して、何らかのユーザーが既にシステムによって承認されていることを受け入れるようにする必要があります。 –

0

まず、this blog postを確認してください。これは、ASP.net Webアプリケーションのシングルサインオンの包括的なガイドです。

異なるドメインにあるサイトで提示されている解決策については(まったく別のドメインにいる場合は認証Cookieを共有できません)、セキュリティ上の重大な問題があると思います。私たちはSSOのあるWebサイトでAndreiの提案に類似したことをしました。ユーザーがメインサイトにログインしてセカンダリサイトにアクセスする場合、サイトへのリンクにはチケットが保持されます(ランダムなGUIDを使用しました)。メインサイトは、Guidに関連付けられたデータベースセッション情報と作成時間(チケットの有効期限)を格納します。セカンダリサイトが新しい無認可のユーザーを検出し、それがWebサービスを介してメインサイトにアクセスするチケットを検出すると、セカンダリサイトはチケットをチェックし、保存したすべてのセッション情報を返します。もう一方のサイトは、ユーザーを認証し、それ自身の認証Cookieを発行することができます。ユーザーが他のサイトを参照している間、メインサイトのセッションを有効にしておくために何かを実装しなければならないので、しばらく休んでもログインする必要はありません。これは、永続的なCookie、またはメインサイトのダミーページを指し示すセカンダリサイトのiframeで実現できます。

+0

私が先にコメントしたように、さらに進める前に、私は100%明確ではないかもしれません。 「2つのサイト」はありません。お客様は自分のシステムで純粋に私たちのアプリを購入&実行しました。彼らはその後、自分のウェブサイト内からインターネットにアクセスできるようにします。自分のサイトにサービスを提供する単一のIISとASP.NETアプリケーションを考えてみましょう。 –

関連する問題