OWIN 4.1, Azure AD openID chrome issue



我在使用Owin时遇到了一个问题,最近更新到了中间件的4.1版本。我决定升级到更高的版本,因为在重定向循环中。

所有浏览器的测试环境都运行良好。

然后我部署到生产中,在从https://login.microsoft.comIDX21323:RequireOnce是%27[PII是隐藏的]%27。OpenIdConnectProtocolValidationContext.Nonce为null,OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce不为null。无法验证nonce。如果%27不需要检查nonce,请将OpenIdConnectProtocolValidator.RequireNonce设置为%27false%27。请注意,如果找到%27nonce%27,将对其进行评估。

我还注意到铬控制台中有以下信息:跨原点读取阻塞(CORB(阻塞跨原点响应https://login.microsoftonline.com/common....

当我使用chrome时,我转到Chrome://flags并禁用";没有SameSite的Cookie必须是安全的";一切都很好。

在我的生产设置中,我有一个Azure应用程序网关位于IIS盒子前面。在应用程序网关,它目前正在卸载SSL并恢复到HTTP,因为它是一个专用网络。这可能是问题所在吗?显然,我可以配置SSL,但不确定这是否能解决问题。

如有任何建议,我们将不胜感激。我在.net框架4.7.2 上运行Webform

我很伤心,因为它在所有其他浏览器中都能工作,在我们的测试环境中也能在Chrome上工作,所以我认为唯一可能的事情就是在网关上卸载SSL,但话虽如此,我本以为这会导致firefox/edge出现问题,但事实并非如此。就chrome而言,它完全是通过HTTPS实现的。

Owin的设置看起来如下,但也尝试了很多不同的东西。

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieSameSite = SameSiteMode.None,
CookieManager = new SameSiteCookieManager(new SystemWebCookieManager())
}) ;
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = azureClientId,
Authority = azureAuthority,
RedirectUri = azureRedirectUrl,
PostLogoutRedirectUri = azurePostLogoutUrl,
Scope = OpenIdConnectScope.OpenIdProfile,
ResponseType = OpenIdConnectResponseType.IdToken,
TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
IssuerValidator = ValidateIssuerWithPlaceholder
},
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed
}
}
);

由限制浏览器发送cookie的新SameSite cookie策略引起的行为。在您的情况下,重定向到您的网站时,Nonce cookie会从Azure请求中剥离。您可以通过为SameSite cookie属性应用None值来避免这种情况,并为支持新SameSite更改的较新浏览器添加Secure属性,或者为旧浏览器保留SameSite为空。下面是关于如何在.Net Core和.Net Framework上使用Owin:实现它的详细文章

即将在ASP.NET和ASP.NET Core 中更改SameSite Cookie

最新更新