У меня есть модуль аутентификации в 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());
}
}