我们有一个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,我是否还需要一个额外的登录步骤,还是应该更改应用以接受AzureAppProxyUserSessionCookie
或AzureAppProxyAccessCookie
? (如果这是一个选项?)
答案 0 :(得分:2)
感谢rfcdejong的评论使我步入正轨。在我们的案例中,我可以通过覆盖OnRedirectToIdentityProvider
事件并在ConfigureServices
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中的应用程序匹配。 还需要分配用户,但是内部应用现在可以在任何地方使用,而无需直接访问服务器。