ASP.NET_SessionId 在 OWIN OpenIdConnectAuthentication 中找不到

ASP.NET_SessionId not found in OWIN OpenIdConnectAuthentication

BackGround :用户一旦登录到我们的 Web 应用程序(使用应用程序级凭据),将显示他们想要使用的邮件系统,基于该用户将被重定向到相应的授权服务器进行身份验证(使用其邮件系统的登录名/密码),并且身份验证服务器将 return 返回一个访问令牌。

在 OnAuthorizationCodeReceivedAsync 或 OnAuthenticationFailedAsync 等通知事件中;我们没有得到 ASP.NET_SessionId 所以说我无法使用在 OAuth Flow 之前设置的任何会话值。

更多详情请参考下面的代码。

app.UseOpenIdConnectAuthentication(New OpenIdConnectAuthenticationOptions With {
            .ClientId = appId,
            .ClientSecret = appSecret,
            .Authority = "https://login.microsoftonline.com/common/v2.0",
            .Scope = $"openid email profile offline_access {ewsScopes}",
            .RedirectUri = redirectUri,
            .PostLogoutRedirectUri = redirectUri,            
            .TokenValidationParameters = New TokenValidationParameters With {
                .ValidateIssuer = False
            },
            .Notifications = New OpenIdConnectAuthenticationNotifications With {
                .AuthenticationFailed = AddressOf OnAuthenticationFailedAsync,
                .AuthorizationCodeReceived = AddressOf OnAuthorizationCodeReceivedAsync
            }
        }) 

我无法在 HttpConext.Current.Session 中获取在通知事件中 OAuth 流之前设置的任何会话值。

根据以下SO;我尝试了不同的方法,如 SystemWebCookieManager、UseKentorOwinCookieSaver 但问题没有解决。
ASP.NET_SessionId + OWIN Cookies do not send to browser

可能是什么问题,我该如何解决?

默认; OpenIDConnect 使用与 SameSite 不兼容的形式 post 重定向。由于应用程序会话 cookie 未发送过来,所以应该是这样。

根据下面的几个堆栈溢出 link;使用 URL 重写或低于 web.config 允许我们在响应 post 返回回调 url 时保持会话,但我们仍然需要为此使用 Owin 的 SystemWebCookieManager 以便工作。

Browser won't set ASP.NET_SessionId cookie on payment gateway's post request to our site

考虑到上述情况;用于 OpenIDConnect 身份验证;将 samesite cookie 设置为 none 并确保安全;这应该有效,但我担心这会增加应用程序的 CSRF(跨站点请求伪造)漏洞。

因此,另一种方法是切换到使用 HTTP 重定向并与 SameSite=Lax 配合使用的代码响应类型。设置合适的代码响应模式和响应类型。

响应模式 = OpenIdConnectResponseMode.Query;

响应类型 = OpenIdConnectResponseType.Code;

https://github.com/aspnet/AspNetKatana/blob/635c92f641ad1e014eead31cc7a365004949fda5/src/Microsoft.Owin.Security.OpenIdConnect/OpenIdConnectAuthenticationOptions.cs#L65-L66