1

我们有一个提供 sso 身份验证的应用程序。其他三个应用程序从 sso 应用程序获得身份验证。用户登录所有应用程序后,我启动了 sso 注销。sso app 向 app1 发送注销请求,然后 app1 以 SAML 注销响应响应。一旦 sso app 收到 SAML 注销响应,它将向 app2 然后向 app3 发送注销请求。有时整个流程运行良好,有时则不行。我已经看到,当 app2/app3/app1 响应时,sso 应用程序身份验证 cookie 从浏览器中消失了,并且该请求对于 sso 应用程序变得未经验证,并且用户无法从所有应用程序中注销。

认证中间件:

services.AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    })
   .AddCookie(options =>
   {
       options.Cookie.Name = ".federation_user_authentication";
       options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
       options.Cookie.Path = "/";
       options.Cookie.IsEssential = true;
       options.ExpireTimeSpan = TimeSpan.FromMinutes(
                       Convert.ToDouble(
                           systemParamsCollection[nameof(JwtTokenVerificationParameterModel.ValidFor)]));
       options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None;
       if (Convert.ToBoolean(configuration["IsCloudDeployment"]))
       {
           options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always; // Cookie/sso login will not work on localhost. because it is on http
       }
   });

您能否让我知道是什么原因以及为什么在应用程序之间重定向 2-3 次后身份验证 cookie 消失了?

4

1 回答 1

1

原因可能是浏览器 cookie 安全性。

如果 cookie 安全配置SameSite=Strict了浏览器,如果调用来自另一个域,则浏览器不会将 cookie 发送到一个域上的服务器。

如果 cookie 安全性是SameSite=LaxGET 并且 POST 调用被区别对待。在 GET 调用期间,浏览器会让 cookie 通过。但是在 POST 调用中,如果调用来自另一个域,浏览器不会将 cookie 发送到一个域上的服务器。

更多信息https://en.wikipedia.org/wiki/HTTP_cookie

于 2021-06-14T11:48:55.020 回答