Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 4
0
        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('?'));
        }
Ejemplo n.º 5
0
        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
                });
            }
        }