2012-01-20 44 views
1

我正在使用Windows Azure ACS在應用程序上構建單一登錄。我正在使用JavaScript/HTML從用戶收集信息。我現在面臨的問題是,我需要承載我的應用程序在不同的主機,例如:在多臺主機上託管ACS應用程序

  • 本地主機
  • 本地主機:81
  • * .cloudapp.net
  • 另一內部主機一樣http://helloacs/

我試圖爲每個主機創建多個依賴應用程序,但它僅適用於localhost/localhost:81。我* .cloudapp.net依賴方應用程序配置這種方式:

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

我的登錄頁面正在建設的replyTo網址是這樣的:

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

這是我生成調用IdentityProviders.js:

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

我正面臨着類似的問題。我有兩個RP,一個使用Windows Live ID和ADFS,另一個使用ADFS。這兩個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中的領域更改爲相應的依賴方應用程序地址即可。您必須更改「wsFederation」元素中的「audienceUris」部分和「」領域「屬性中的地址。如果領域屬性與應用程序運行的域不同,則認證將失敗。

檢出thisthat問題 - 都指向相同的文檔和示例如何更改領域,以防您想在多個域下提供您的應用程序。我會查看更多樣本。

這裏就怎麼改境界/返回地址/

相關問題