2012-01-20 5 views
1

私はWindows Azure ACSを使用してシングルサインオンアプリケーションを構築しています。私はユーザーから情報を収集するためにjavascript/HTMLを使用しています。私が直面しています問題は、私は、たとえば、異なるホスト上で自分のアプリケーションをホストする必要があるということです。複数のホストでACSアプリケーションをホストする

  • localhostの
  • はlocalhost:81
  • * .cloudapp.net
  • http://helloacs/
  • のような他の内部ホスト

これらのホストごとに複数の頼りになるアプリケーションを作成しようとしましたが、localhost/localhost:81のみで動作しました。このような

Name: *.cloudapp.net 
Realm: *.cloudapp.net 
Return URL: http://*.cloudapp.net/ 

マイログインページが構築された返信先のURL:

http://*.cloudapp.net/Login.aspx 

これでIdentityProviders.jsに私の生成コール:

パーティ製アプリを頼っマイ*の.cloudapp.netはそのように設定されています私は、アイデンティティプロバイダに移動し、Iをログインした後
https://*.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=wsfederation&realm=*.cloudapp.net&reply_to=http://*.cloudapp.net/Login.aspx&version=1.0&callback=ShowSigninPage 

が得る:

ACS30000: There was an error processing an OpenID sign-in response. 

解決策でない場合、アプリケーションを複数のホストで動作させるにはどうすればよいですか?

答えて

1

私はこのような同様の問題に直面していました。 Windows Live IDとADFSを使用するRPと、ADFSだけを使用する2つのRPがありました。どちらのRPは、同じクラウドサービスを指しているので、私はhttps://orgB.myDomanin.comに行ったとき、私は、ACSにリダイレクトされたが、同じように、何かを私はweb.configファイルで指定されたレルムを使用していた:私はこれを変更した場合

https://name.accesscontrol.windows.net/v2/wsfederation?wa=sigin1.0&wtrealm=https%3a%2f%orgA.myDomain.com%2.... 

手動で次のように入力します。

https://name.accesscontrol.windows.net/v2/wsfederation?wa=sigin1.0&wtrealm=https%3a%2f%orgB.myDomain.com%2 

作品はそんなものです。

最後に、Sandrinoのエントリーブログ:http://fabriccontroller.net/blog/a-few-tips-to-get-up-and-running-with-theazure-appfabric-access-control-serviceの解決策が見つかりました。「領域の更新」を参照してください。ブログにアクセスできない場合は、ここでコードをコピーしてください。

private void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e) 
{ 
    // Get the request url. 
    var request = HttpContext.Current.Request; 
    var requestUrl = request.Url; 

    // Build the realm url. 
    var realmUrl = new StringBuilder(); 
    realmUrl.Append(requestUrl.Scheme); 
    realmUrl.Append("://"); 
    realmUrl.Append(request.Headers["Host"] ?? requestUrl.Authority); 
    realmUrl.Append(request.ApplicationPath); 
    if (!request.ApplicationPath.EndsWith("/")) 
     realmUrl.Append("/"); 
    e.SignInRequestMessage.Realm = realmUrl.ToString(); 
} 
3

これらのホストごとに複数の依存アプリケーションを作成するのは間違いありません。しかし、あなたがいないカスタムコードでデフォルトのパッシブフェデレーションを使用する場合、レルムが難しい。このようなあなたのweb.configファイルでコーディングされている:あなたは複数のホスト名の下で同時に実行するには、同じアプリケーションを使用する場合は

<microsoft.identityModel> 
    <service> 
    ..... 
    <audienceUris> 
     <add value="http://localhost:4500/"/> 
     </audienceUris> 
     <federatedAuthentication> 
     <wsFederation passiveRedirectEnabled="true" 
         issuer="https://staykov.accesscontrol.windows.net/v2/wsfederation" 
         realm="http://localhost:4500/" 
         requireHttps="false" /> 
     <cookieHandler requireSsl="false" /> 
     </federatedAuthentication> 

、あなたは少しのコーディングを追加する必要があります。別のドメインで同じアプリケーションをテストする必要がある場合は、web.configのレルムを対応するアプリケーションのアドレスに変更してください。 "audienceUris"セクションでアドレスを変更し、 "wsFederation"エレメントの "realm"アトリビュートを変更する必要があります。 realm属性が、アプリケーションが実行するドメインと異なる場合、認証は失敗します。

thisthatの質問を参照してください。複数のドメインにアプリケーションを提供する場合は、同じドキュメントを参照し、領域を変更する方法を例示しています。私はさらにサンプルを探します。

そしてここにブログの記事以来、レルム/リターンアドレス/

1

を変更する方法については目を通すがオフラインになっている(といくつかの時間のために)、私はここに別の答えを投稿します。

reply_to複数のアドレスをACS依存パーティに設定するには、APIを使用する必要があります。 (Webインターフェイスからはできません)。 http://msdn.microsoft.com/en-us/library/windowsazure/hh135147.aspx#BKMK_5

あなたが使用することもできFluentACS、それは非常に簡単になります。

は、ここで使用できるいくつかのサンプルコードがあります。

関連する問題