/// <summary> /// Starts a logout. /// </summary> /// <param name="request">The logout request.</param> /// <returns></returns> public virtual async Task LogoutAsync(LogoutRequest request = null) { if (request == null) { request = new LogoutRequest(); } await EnsureConfigurationAsync(); await _authorizeClient.EndSessionAsync(request); }
/// <summary> /// Creates a logout URL. /// </summary> /// <param name="request">The logout request.</param> /// /// <param name="cancellationToken">A token that can be used to cancel the request</param> /// <returns></returns> public virtual async Task <string> PrepareLogoutAsync(LogoutRequest request = default, CancellationToken cancellationToken = default) { await EnsureConfigurationAsync(cancellationToken); var endpoint = Options.ProviderInformation.EndSessionEndpoint; if (endpoint.IsMissing()) { throw new InvalidOperationException("Discovery document has no end session endpoint"); } return(_authorizeClient.CreateEndSessionUrl(endpoint, request)); }
/// <summary> /// Creates a logout URL. /// </summary> /// <param name="request">The logout request.</param> /// <returns></returns> public virtual async Task<string> PrepareLogoutAsync(LogoutRequest request = null) { if (request == null) request = new LogoutRequest(); await EnsureConfigurationAsync(); var endpoint = _options.ProviderInformation.EndSessionEndpoint; if (endpoint.IsMissing()) { throw new InvalidOperationException("Discovery document has no end session endpoint"); } return _authorizeClient.CreateEndSessionUrl(endpoint, request); }
internal string CreateEndSessionUrl(string endpoint, LogoutRequest request) { var parameters = new Dictionary <string, string>(); if (request.IdTokenHint.IsPresent()) { parameters.Add(OidcConstants.EndSessionRequest.IdTokenHint, request.IdTokenHint); } if (_options.PostLogoutRedirectUri.IsPresent()) { parameters.Add(OidcConstants.EndSessionRequest.PostLogoutRedirectUri, _options.PostLogoutRedirectUri); } // workaround bug in IdentityModel return(new AuthorizeRequest(endpoint).Create(parameters).TrimEnd('?')); }
public async Task <BrowserResult> EndSessionAsync(LogoutRequest request, CancellationToken cancellationToken = default) { var endpoint = _options.ProviderInformation.EndSessionEndpoint; if (endpoint.IsMissing()) { throw new InvalidOperationException("Discovery document has no end session endpoint"); } var url = CreateEndSessionUrl(endpoint, request); var browserOptions = new BrowserOptions(url, _options.PostLogoutRedirectUri ?? string.Empty) { Timeout = TimeSpan.FromSeconds(request.BrowserTimeout), DisplayMode = request.BrowserDisplayMode }; return(await _options.Browser.InvokeAsync(browserOptions, cancellationToken)); }
/// <summary> /// Starts a logout. /// </summary> /// <param name="request">The logout request.</param> /// <returns></returns> public virtual async Task <LogoutResult> LogoutAsync(LogoutRequest request = default) { await EnsureConfigurationAsync(); var result = await _authorizeClient.EndSessionAsync(request); if (result.ResultType != Browser.BrowserResultType.Success) { return(new LogoutResult(result.ResultType.ToString()) { Response = result.Response }); } else { return(new LogoutResult { Response = result.Response }); } }