protected override void OnInit(EventArgs e) { base.OnInit(e); if (!string.IsNullOrEmpty(Request["error"]) && !string.IsNullOrEmpty(Request["error_description"])) { // AADB2C90091: The user has cancelled entering self-asserted information. // User clicked on Cancel when resetting the password => Redirect to the original page if (Request["error_description"]?.IndexOf("AADB2C90091") > -1) { if (!string.IsNullOrEmpty(Request["state"])) { var state = new State(Request["state"]); if (!string.IsNullOrEmpty(state.RedirectUrl)) { Response.Redirect(state.RedirectUrl, true); } } } else { var errorMessage = Localization.GetString("LoginError", LocalResourceFile); errorMessage = string.Format(errorMessage, Request["error"], Request["error_description"]); _logger.Error(errorMessage); UI.Skins.Skin.AddModuleMessage(this, errorMessage, ModuleMessage.ModuleMessageType.RedError); } } else { var identityProvider = UserInfo.Profile.ProfileProperties.GetByName("IdentitySource"); if (identityProvider != null && identityProvider.PropertyValue == "Azure-B2C") { var oauthClient = new AzureClient(PortalId, AuthMode.Login); // Is returning after editing the user profile? var state = new State(Request["state"]); if (Request.UrlReferrer?.Host == oauthClient.LogoutEndpoint.Host && !string.IsNullOrEmpty(Request["state"]) && state.Service == oauthClient.Service && !string.IsNullOrEmpty(state.RedirectUrl) && oauthClient.HaveVerificationCode()) { oauthClient.Policy = AzureClient.PolicyEnum.ProfilePolicy; AuthorisationResult result = oauthClient.Authorize(); if (result != AuthorisationResult.Denied) { oauthClient.UpdateUserProfile(); Response.Redirect(state.RedirectUrl); } } else { oauthClient.NavigateUserProfile(Request.UrlReferrer); } } } }
protected override void OnInit(EventArgs e) { base.OnInit(e); if (!string.IsNullOrEmpty(Request["error"]) && !string.IsNullOrEmpty(Request["error_description"])) { // AADB2C90091: The user has cancelled entering self-asserted information. // User clicked on Cancel when resetting the password => Redirect to the original page if (Request["error_description"]?.IndexOf("AADB2C90091") > -1) { var url = Request["state"].Split('-'); if (url.Length > 1) { Response.Redirect(url[1], true); } } else { var errorMessage = Localization.GetString("LoginError", LocalResourceFile); errorMessage = string.Format(errorMessage, Request["error"], Request["error_description"]); _logger.Error(errorMessage); UI.Skins.Skin.AddModuleMessage(this, errorMessage, ModuleMessage.ModuleMessageType.RedError); } } else { if (UserInfo != null && UserInfo.Username.ToLowerInvariant().StartsWith("azureb2c-")) { var oauthClient = new AzureClient(PortalId, AuthMode.Login); // Is returning after editing the user profile? if (Request.UrlReferrer?.Host == oauthClient.LogoutEndpoint.Host && !string.IsNullOrEmpty(Request["state"]) && Request["state"].StartsWith(oauthClient.Service) && Request["state"].Length > oauthClient.Service.Length && oauthClient.HaveVerificationCode()) { oauthClient.Policy = AzureClient.PolicyEnum.ProfilePolicy; AuthorisationResult result = oauthClient.Authorize(); if (result != AuthorisationResult.Denied) { oauthClient.UpdateUserProfile(); var url = Request["state"].Split('-'); if (url.Length > 1) { Response.Redirect(url[1]); } } } else { oauthClient.NavigateUserProfile(Request.UrlReferrer); } } } }
protected override void OnInit(EventArgs e) { base.OnInit(e); if (!string.IsNullOrEmpty(Request["error"]) && !string.IsNullOrEmpty(Request["error_description"])) { // AADB2C90091: The user has cancelled entering self-asserted information. // User clicked on Cancel when resetting the password => Redirect to the original page if (Request["error_description"]?.IndexOf("AADB2C90091") > -1) { if (!string.IsNullOrEmpty(Request["state"])) { var state = new State(Request["state"]); if (!string.IsNullOrEmpty(state.RedirectUrl)) { Response.Redirect(state.RedirectUrl, true); } else { Response.Redirect("/", true); } } else { Response.Redirect("/", true); } } else { var errorMessage = Localization.GetString("LoginError", LocalResourceFile); errorMessage = string.Format(errorMessage, Request["error"], Request["error_description"]); _logger.Error(errorMessage); UI.Skins.Skin.AddModuleMessage(this, errorMessage, ModuleMessage.ModuleMessageType.RedError); } } else { var identityProvider = UserInfo.Profile.ProfileProperties.GetByName("IdentitySource"); if (identityProvider != null && identityProvider.PropertyValue == "Azure-B2C") { var oauthClient = new AzureClient(PortalId, AuthMode.Login); if (HttpContext.Current.Request.Cookies.AllKeys.Contains("AzureB2CUserToken")) { // Logout on B2C to clear the cached B2C login. This will redirect back to here after the logout oauthClient.Logout(); return; } // Is returning after running the impersonation on B2C? var state = new State(Request["state"]); if (Request.UrlReferrer?.Host == oauthClient.LogoutEndpoint.Host && !string.IsNullOrEmpty(Request["state"]) && state.Service == oauthClient.Service && !string.IsNullOrEmpty(state.RedirectUrl) && oauthClient.HaveVerificationCode()) { oauthClient.Policy = AzureClient.PolicyEnum.ImpersonatePolicy; AuthorisationResult result = oauthClient.Authorize(); if (result != AuthorisationResult.Denied) { if (User != null) { var url = oauthClient.Impersonate(); if (string.IsNullOrEmpty(url)) { Response.Redirect($"{Request.Url.Scheme}://{PortalSettings.PortalAlias.HTTPAlias}"); // Redirect to homepage after impersonation } else { Response.Redirect(url); } } } } else { var uri = oauthClient.NavigateImpersonation(Request.UrlReferrer, UserInfo.Email); Response.Redirect(uri.ToString(), false); } } } }