/// <summary> /// Handles Signout /// </summary> /// <returns></returns> protected override async Task ApplyResponseGrantAsync() { AuthenticationResponseRevoke signout = Helper.LookupSignOut(Options.AuthenticationType, Options.AuthenticationMode); if (signout != null) { object obj = null; Context.Environment.TryGetValue("wsfed.SignOutRedirect", out obj); string wreply = obj as string; WsFederationMessage wsFederationMessage = new WsFederationMessage() { IssuerAddress = Options.IssuerAddress ?? string.Empty, Wtrealm = Options.Wtrealm, }; if (!string.IsNullOrWhiteSpace(wreply)) { wsFederationMessage.Wreply = wreply; } else if (!string.IsNullOrWhiteSpace(Options.Wreply)) { wsFederationMessage.Wreply = Options.Wreply; } if (Options.Notifications != null && Options.Notifications.RedirectToIdentityProvider != null) { RedirectToIdentityProviderNotification <WsFederationMessage> notification = new RedirectToIdentityProviderNotification <WsFederationMessage> { ProtocolMessage = wsFederationMessage }; await Options.Notifications.RedirectToIdentityProvider(notification); if (notification.Cancel) { return; } } string redirect = wsFederationMessage.CreateSignOutQueryString(); if (!Uri.IsWellFormedUriString(redirect, UriKind.Absolute)) { _logger.WriteError(string.Format(CultureInfo.InvariantCulture, "The WsFederation sign-out redirect uri is not well formed: '{0}'", redirect)); return; } Response.Redirect(redirect); } }