使用Application Gateway

时间:2018-01-23 10:42:29

标签: asp.net-core azure-active-directory azure-application-gateway

我们有一个ASP Core 2.0应用程序可以很好地与专用网络上的Azure AD配合使用。但是,我们一直在使用Azure应用程序网关,调查允许从外部访问远程工作人员等应用程序的可能性。

我们已在Gateway上注册了该应用,并且在使用Azure AD登录后,可以通过ourapp.msappproxy.net访问匿名首页。但是,当在应用中登录(再次?)时,客户端会重定向回intervalServer/signin-oidc,但由于无法从外部访问,因此会失败。

虽然我怀疑这是解决方案的任何部分,但我已尝试将重定向"CallbackPath": "/signin-oidc",重写为绝对路径ourapp.msappproxy.net/signin-oidc,但我似乎无法弄清楚如何。在Azure门户中更改回复URL也没有帮助(虽然我怀疑它会这样做,这仅用于验证吗?)。

我似乎无法就此特定情况找到任何指导,因此欢迎。否则,我还在考虑以下几点:

1,如果我可以将重定向更改为ourapp.msappproxy.net/signin-oidc,那会解决签到问题吗?

2,我是否还需要一个额外的登录步骤,还是应该更改应用以接受AzureAppProxyUserSessionCookieAzureAppProxyAccessCookie? (如果这是一个选项?)

1 个答案:

答案 0 :(得分:2)

感谢rfcdejong的评论使我步入正轨。在我们的案例中,我可以通过覆盖OnRedirectToIdentityProvider事件并在ConfigureServices

中提供代理URL来将Azure AD与Azure Application Gateway结合使用
services.AddAuthentication(...)
          .AddOpenIdConnect(options =>
         {
           options.ClientId = Configuration["Authentication:AzureAD:ClientId"];
           options.Authority = Configuration["Authentication:AzureAd:Authority"];
           options.CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"];

           if (IsProduction) // So that I can use the original redirect to localhost in development
           {
             Task RedirectToIdentityProvider(RedirectContext ctx)
             {
               ctx.ProtocolMessage.RedirectUri = "https://ourapp.msappproxy.net/signin-oidc";
               return Task.FromResult(0);
             }

             options.Events = new OpenIdConnectEvents
             {
               OnRedirectToIdentityProvider = RedirectToIdentityProvider
             };
           }
          })

需要将返回URI配置为与Azure Portal中的应用程序匹配。 还需要分配用户,但是内部应用现在可以在任何地方使用,而无需直接访问服务器。