2012-04-25 9 views
3

自家認証を使用する既存のASP.NETアプリケーション(Webフォーム)があります。私たちは、シングルサインオンソリューションの実装を任されており、WIFを使用することを選択しました。WIFとサブドメイン

アプリケーションのインスタンスが1つ実行されており、サブドメイン(client1.ourapp.com、client2.ourapp.comなど)を使用してクライアントを識別します。アプリケーションコードでは、最初のサブドメインを取り除き、クライアントを識別します。

私たちは、認証されたユーザーを適切なサブドメインにリダイレクトする方法を理解するために、WIFの概念実証を行ってきました。既定の動作は、STSがユーザーを構成ファイルで識別される領域にリダイレクトするように見えます。以下はPoC設定ファイルです。ホストファイルを使用して別のクライアントを偽装しています(つまり、127.0.0.1 client1.ourapp.com、127.0.0.1 client2.ourapp.com)。

<federatedAuthentication> 
    <wsFederation 
     passiveRedirectEnabled="true" 
     issuer="http://ourapp.com/SSOPOCSite_STS/" 
     realm="http://client1.ourapp.com" 
     requireHttps="false" /> 
</federatedAuthentication> 

明らかにこれは我々が同じサブドメインに皆をリダイレクトすることができないので、仕事に行くのではありません。

私たちはこれをどう対処するかを考え出しましたが、正しいことをしているのか、それともちょうど幸運を受けているのかについて、いくつかの外部の意見を欲しがっています。

FAMのRedirectingToIdentityProviderイベントのイベントハンドラを作成しました。そこでは、リクエストURLから会社名を取得し、会社名を使用してレルム文字列を作成し、SignInRequestMessageのRealmとHomeRealmを設定し、FAMにその処理を任せます(認証のためにSTSにリダイレクトします)。

protected void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e) 
{ 
    // this method parses the HTTP_HOST and gets the first subdomain 
    var companyName = GetCompanyName(); 
    var realm = GetRealm(companyName); 

    e.SignInRequestMessage.Realm = realm; 
    e.SignInRequestMessage.HomeRealm = companyName; 
} 

string GetRealm(string companyName) 
{ 
    return String.Format("http://{0}.ourapp.com/SSOPOCSite/", companyName); 
} 

これは問題の妥当な解決策のようですか?

結果として発生する可能性のある問題はありますか?

良いアプローチがありますか?

答えて

1

あなたのソリューションは、(必要な情報を明示的に渡して)うまくいくと思いますが、唯一の他の解決策はRequest.UrlReferrerを使用して、ユーザーがどのサブドメインから来たのかを判断することです。

関連する問題