2015-09-09 82 views
7

我正在構建一個使用Azure Active Directory身份驗證的MVC應用程序。當我在本地開發時,我希望能夠登錄以進行測試/開發。而應用程序的網址就像http://localhost:43400。這也在AD應用中編碼爲Sign-On UrlReply Url使用Azure Active Directory - 一個應用程序在本地登錄併發布時

當我將同一個應用程序部署到服務器時,應用程序url被更改 - 變成類似myappname.azurewebsites.net的東西,我無法使用相同的AD應用程序登錄。我能做的最好的辦法是完成登錄過程,但是AD將我重定向回localhost:43400這是錯誤的。

Startup.Auth.csPostLogoutRedirectUri屬性,我給了應用程序,但它沒有任何區別。

任何方式使本地應用程序和部署的應用程序使用相同的Azure AD?

我可以用不同的網址和密鑰做2個AD申請,並在部署時重寫web.config中的值。但這聽起來不像是最好的解決方案。還有什麼我可以做的?

UPD

這裏我指的是在Startup.Auth.cs位:

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions 
    { 
     ClientId = clientId, 
     Authority = Authority, 
     PostLogoutRedirectUri = postLogoutRedirectUri, // <-- this is coming from web.config, different in dev and prod 

     Notifications = new OpenIdConnectAuthenticationNotifications() 
     { 
      ..... 

     } 
    }); 

查看完整的代碼清單here

而在Azure的AD應用我想這兩個地址作爲回覆地址在同一時間: Azure AD Application Reply URL

但廣告只用了一個地址重定向,即使客戶端指定匹配一個重定向的記錄。

+0

您不能在該Azure AD中創建2個獨立的應用程序嗎? –

+0

我可以 - 這就是我問題的最後部分所說的。有沒有更好的辦法? – trailmax

+0

對不起......沒有看過那部分!你可以做的另一件事是在同一個應用程序中爲兩個環境提供重定向URI。我試過的是在我的應用程序中使用同一個環境的多個重定向URI(一個用於註冊,另一個用於登錄),但是您可以嘗試一下。 –

回答

9

您可以添加多個重定向uri到您的應用程序,這就是爲什麼該屬性被實現爲一個列表!您只需確保指定在運行時使用哪個URI。您可以通過多種方式來實現 - 您可以在中間件初始化時指定返回URI,也可以添加動態代碼,以便在登錄消息中插入重定向URI。有關後一種方法的示例,請參閱https://github.com/AzureADSamples/WebApp-MultiTenant-OpenIdConnect-DotNet/blob/master/TodoListWebApp/App_Start/Startup.Auth.cs中的RedirectToIdentityProvider

+0

我試圖在列表中列出兩個地址,但可能確實找到了指定我需要哪一個的方法。在那個代碼示例中,你是否在談論'RedirectToIdentityProvider'部分?順便說一句,我已經在問題中添加了更多的代碼。 – trailmax

+1

是的,我指的是RedirectToIdentityProvider。這將允許您在運行時擁有一個自適應代碼庫,以注入正確的重定向URI。正如我還暗示的那樣:如果您希望在部署之前更改靜態字符串,則可以始終指定要在中間件初始化中直接使用的兩個URI中的哪一個,您只需以與傳遞PostLogoutRedirectUri相同的方式傳遞RedirectUri今天。 – vibronet

+0

有你!明天當我回到辦公室時,我會放手一搏。 – trailmax

相關問題