Аутентификация OWIN с помощью Azure AD B2 C OP: SIgnOut не удаляет Cook ie при вызове из внешнего iFrame - PullRequest
0 голосов
/ 06 августа 2020

У меня есть модуль аутентификации в Umbraco, использующий OWIN / OID C, аутентифицируемый по нашему ресурсу Azure AD B2 C. В рамках этого модуля есть метод контроллера выхода из системы, который работает правильно.

Мы пытаемся разработать единый выход для приложений в рамках нашего Azure клиента. Мы все еще работаем над тем, чтобы Azure AD B2 C вызывал метод выхода из системы для каждого приложения. Чтобы протестировать запуск выхода из других приложений, я настроил iframe в одном из наших пользовательских приложений (также аутентифицируемых через Azure AD B2 C), который вызывает метод LogOut в нашей реализации Umbraco, когда пользователи выходят из системы. из этого приложения. Я вижу, что метод LogOut вызывается, когда внешний метод открывает iframe, и все объекты выглядят так же, как когда метод вызывается из Umbraco. Однако пользователь не выходит из приложения. Кулинар аутентификации ie, то есть .As pNet .ApplicationCook ie, имеет SameSite как None, Secure как true и HttpOnly как false, но он не удаляется, как это происходит, когда Umbraco вызывает метод.

Любые советы о том, как заставить работать метод выхода из внешнего приложения, были бы признательны.

Вот моя конфигурация:

      private void ConfigureAzureB2CAuthentication(object sender, OwinMiddlewareConfiguredEventArgs args) {
         //get appbuilder
         AppBuilder app = (AppBuilder)args.AppBuilder;
         app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ApplicationCookie);

         app.UseCookieAuthentication(Current.Factory.GetInstance<FrontEndCookieAuthenticationOptions>(), PipelineStage.Authenticate);
         //Set configuration on appbuilder
         app.UseOpenIdConnectAuthentication(
             new OpenIdConnectAuthenticationOptions {
                MetadataAddress = string.Format(
                     ConfigurationManager.AppSettings["ida:AzureInstance"],
                     ConfigurationManager.AppSettings["ida:Tenant"],
                     ConfigurationManager.AppSettings["ida:SignUpSignInPolicyId"]),
                ClientId = ConfigurationManager.AppSettings["ida:ClientId"],
                RedirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"],
                PostLogoutRedirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"],
                Notifications = new OpenIdConnectAuthenticationNotifications {
                   RedirectToIdentityProvider = OnRedirectToIdentityProvider,
                   AuthorizationCodeReceived = OnAuthorizationCodeReceived,
                   AuthenticationFailed = OnAuthenticationFailed
                },
                TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters {
                   NameClaimType = ConfigurationManager.AppSettings["ida:ClaimsLabelEmail"],
                   ValidateIssuer = false
                },
                Scope = ConfigurationManager.AppSettings["ida:ScopesOpenIDConnect"],

             });

         //reafirm backoffice and preview authentication
         app.UseUmbracoBackOfficeCookieAuthentication(_umbracoContextAccessor, _runtimeState, _userService, _globalSettings, _securitySection, PipelineStage.Authenticate)
            .UseUmbracoBackOfficeExternalCookieAuthentication(_umbracoContextAccessor, _runtimeState, _globalSettings, PipelineStage.Authenticate)
            .UseUmbracoPreviewAuthentication(_umbracoContextAccessor, _runtimeState, _globalSettings, _securitySection, PipelineStage.PostAuthenticate);
      }

и это метод выхода:

      public void LogOut(string redirectUrl = "/") {
         if (Request.IsAuthenticated) {
            RemoveLoggedInMemberAccessToken();
            IEnumerable<AuthenticationDescription> authTypes = HttpContext.GetOwinContext().Authentication.GetAuthenticationTypes();
            AuthenticationProperties authenticationProperties = new AuthenticationProperties { RedirectUri = redirectUrl };
            HttpContext.GetOwinContext().Authentication.SignOut(authenticationProperties, authTypes.Select(t => t.AuthenticationType).ToArray());
         }
      }
...