2015-09-09 55 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

相关问题