2009-04-24 15 views
5

フォーム認証を使用するASP .NET Webアプリケーションがあります。このアプリケーションを「Foo」と呼ぶことにしましょう。私は "Bar"という別のASP .NETアプリケーションを作成しています。あるASP .NETアプリケーションから別のASP .NETアプリケーションへのユーザーの安全な転送

ユーザーがFooにログインしてから、Barアプリケーションのページに移動するリンクをクリックします。 Barアプリケーションでは、Fooユーザーが再度ログインする必要はありません。 FooアプリはセキュリティチケットをBarアプリに渡す必要があり、ユーザーはBarアプリ内で自分のビジネスについて知ることができます。

また、バーアプリへのアクセスを制限したいと考えています。ユーザーが最初にログインしなくてもBarアプリケーションにアクセスしようとすると、Fooログインページにリダイレクトされます。

これは可能ですか?もしそうなら、私はこれをどのように実装するのですか?

+0

優秀な質問、私はStackoverflowでそれを見てうれしい! +1! –

答えて

2

私はこれを一度だけ行いました。これはPHPサイトとASP.NETサイトの間でした(私はASP.NET開発者でしたが、PHPについても少し知っていました)。

App1がユーザーのエントリポイントである場合、ログオン時App1はユーザー名と生成されたキー(GUIDなど)で構成されるユーザーのキーと値のペアを作成する必要があります。プログラム的には、App2と通信してこのキーを送信する必要があります(たとえば、バックグラウンドスレッドを起動するなど)。ユーザーJohnDoeがApp1で正常にログインしたとします。

App1のようなwww.app2.com/SetTempKey.aspx?userId=JohnDoe &キー= 3l3kjlk3j4lkj34としてHTTP URLを介してコール(例えば通信のいくつかの種類を介してキー(3l3kjlk3j4lkj34、JohnDoeという)を生成し、App2のに送信します - セキュリティ上の理由から特定のIPからの要求のみを許可するページ)。

App2は一時アクセスキーを受信して​​保存します。 App2にwww.app2.com/login.aspxのログインページがあるとします。

app1では、「go to our app2」のような適切なラベルを付けてwww.app2.com/login.aspx?tempKey=3l3kjlk3j4lkj34へのリンクを生成します。ユーザーがリンクをクリックすると、app2のlogin.aspxページが呼び出されます。 querystringにtempKey querystringパラメータの有無を確認し、app2に格納された一時キーのキーの有効性をチェックすると、REALLYがJohnDoeであることがわかります。

App2はFormsAuthentication.RedirectFromLoginPage( "JohnDoe"、true)(最初にユーザー名を指定し、次にformsAuth Cookieを永続化/ not_session_livedにする必要がある)を呼び出すだけで、ユーザーをログに記録します。

...それはかなりです。

+0

OK。私はこれがうまくいくと思う。キーを期限切れにすることをどのように提案しますか?有効期限を一時ストアに保存し、App2がキーの有効性をチェックしたときに検証しますか?どう思いますか? –

+0

単純な有効期限ポリシーは、Cacheオブジェクトにキーを格納することです。これらのキーを挿入すると、有効期限をスライドまたは絶対有効期限に設定できます。 (CacheオブジェクトはHttpRuntime.Cacheです) –

+0

追加情報が必要な場合は、私に連絡してください。私のプロフィールに私のメールアドレスがあります。がんばろう! –

関連する問題