Authentication Azure AD身份验证重定向\u uri在linux托管(Cloud Foundry)ASP.NET Core 2.2应用程序上不使用https
我在SAP云环境(Cloud Foundry)中的linux容器上托管了一个ASP.NET核心应用程序 我正在使用Authentication Azure AD身份验证重定向\u uri在linux托管(Cloud Foundry)ASP.NET Core 2.2应用程序上不使用https,authentication,asp.net-core,https,azure-active-directory,cloud-foundry,Authentication,Asp.net Core,Https,Azure Active Directory,Cloud Foundry,我在SAP云环境(Cloud Foundry)中的linux容器上托管了一个ASP.NET核心应用程序 我正在使用Microsoft.AspNetCore.authentication.AzureAD.UI库实现Azure AD身份验证 身份验证失败,因为无论我最初访问web应用程序的协议是什么,它都会使用http协议生成redirect\u uri 此操作失败,因为它与Azure中应用程序注册中定义的https url不匹配 AADSTS50011: The reply url specifi
Microsoft.AspNetCore.authentication.AzureAD.UI
库实现Azure AD身份验证
身份验证失败,因为无论我最初访问web应用程序的协议是什么,它都会使用http
协议生成redirect\u uri
此操作失败,因为它与Azure中应用程序注册中定义的https url不匹配
AADSTS50011: The reply url specified in the request does not match the reply urls configured for the application
在选项中,您可以传入回调路径
,但这只接受相对路径(必须以/)开头)。
否则,它将来自基于url自动生成的重定向url
我不明白的是,即使我使用https
直接在浏览器中访问应用程序,它仍然在重定向uri中使用http
我想潜在的问题是,云铸造中托管的应用程序接受http请求
下面是我如何实现Azure AD身份验证的代码部分
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("Authentication:AzureAD", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0"; // Microsoft identity platform
options.TokenValidationParameters.ValidateIssuer = true;
});
app.UseHsts();
app.UseHttpsRedirection();
"Authentication": {
"AzureAD": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "{app-application-id}",
"TenantId": "{my-tenant-id}"
}
}
services.AddAuthentication(AzureAddFaults.AuthenticationScheme)
.AddAzureAD(options=>Configuration.Bind(“身份验证:AzureAD”,options));
配置(AzureADDefaults.OpenIdScheme,选项=>
{
options.Authority=options.Authority+“/v2.0”;//Microsoft identity platform
options.TokenValidationParameters.ValidateIsuer=true;
});
app.UseHsts();
app.UseHttpsRedirection();
“身份验证”:{
“蓝精灵”:{
“实例”:https://login.microsoftonline.com/",
“ClientId”:“{app application id}”,
“租户id”:“{我的租户id}”
}
}
您的问题类似于。不同之处在于,您在cloudfoundry中部署了应用程序,而另一个在Azure web app中部署了应用程序
如果您的应用程序被迫使用https,您只需强制重定向\u uri
使用https
如果您想要一个http和https都能工作的通用解决方案(前提是您已经在azure portal中将http和https配置为重定向url),您可以尝试在标题中找到真正的proto。您的问题类似于。不同之处在于,您在cloudfoundry中部署了应用程序,而另一个在Azure web app中部署了应用程序
如果您的应用程序被迫使用https,您只需强制重定向\u uri
使用https
如果您想要一个http和https都能工作的通用解决方案(前提是您已经在azure portal中将http和https配置为重定向url),您可以尝试在标题中找到真正的原型。Tony Ju提供了一个指向类似问题的极好链接,帮助我缩小范围并最终解决问题 但是,该解决方案只提供代码示例,我想再多写一点我是如何实现最终实现的 当您的应用程序位于代理服务器和/或负载平衡器之后时,该问题与此相关。代理隐藏了有关初始请求的信息,例如原始模式,从而使应用程序中依赖此信息的服务行为不正确(例如返回url) 从文档中可以看出,这是我问题的根本原因 当通过HTTP代理HTTPS请求时,原始方案(HTTPS) 已丢失,必须在标头中转发 以及: 协议 从公共互联网到云控制器的所有流量 UAA发生在HTTPS上。在系统的边界内, 组件通过发布-订阅(pub-sub)消息总线进行通信 NAT、HTTP和SSL/TLS 简而言之,您需要使用标准的
中间件
转发某些httpheader
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
app.UseForwardedHeaders();
看起来.net core 3不再需要此功能,但SAP尚未更新其dotnet容器,因此我在撰写本文时无法对其进行验证。Tony Ju提供了一个指向类似问题的极好链接,帮助我缩小范围并最终解决问题 但是,该解决方案只提供代码示例,我想再多写一点我是如何实现最终实现的 当您的应用程序位于代理服务器和/或负载平衡器之后时,该问题与此相关。代理隐藏了有关初始请求的信息,例如原始模式,从而使应用程序中依赖此信息的服务行为不正确(例如返回url) 从文档中可以看出,这是我问题的根本原因 当通过HTTP代理HTTPS请求时,原始方案(HTTPS) 已丢失,必须在标头中转发 以及: 协议 从公共互联网到云控制器的所有流量 UAA发生在HTTPS上。在系统的边界内, 组件通过发布-订阅(pub-sub)消息总线进行通信 NAT、HTTP和SSL/TLS 简而言之,您需要使用标准的
中间件
转发某些httpheader
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
app.UseForwardedHeaders();
看起来.net core 3不再需要此链接,但SAP尚未更新其dotnet容器,因此我在撰写本文时无法对其进行验证。感谢您指出此链接,它确实与我的链接相同。因此,这个问题似乎与linux环境和代理有关。有一些我不知道的有趣点,比如
转发头选项
。我暂时搁置了这篇文章,以关注其他一些特性,但下周我会再次讨论。我会随着它的发展而更新。谢谢你指出这个链接,它确实和我的一样。因此,这个问题似乎与linux环境和代理有关。有一些有趣的地方我不知道,比如ForwardH