private string BuildAuthenticationUrl(LogoutParameters parameters, LogoutState state)
 {
     return(new UrlBuilder(parameters.EndSessionEndpoint)
            .Add("post_logout_redirect_uri", parameters.RedirectUri)
            .Add("id_token_hint", parameters.IdTokenHint, parameters.RedirectUri.IsNotEmpty())
            .Add("state", state.State)
            .Add(parameters.AdditionalParameters)
            .ToString());
 }
        public void EnsureValidResponse(LogoutResponse response, LogoutState state)
        {
            if (response.UrlParsingType != UrlParsingType.Query)
            {
                var partName = Enum.GetName(typeof(UrlParsingType), UrlParsingType.Query);
                throw Logger.Exception($"The Logout response was expected in the \"{partName}\" url part");
            }

            EnsureNoErrorsPresent(response);
        }
        public LogoutRequest CreateLogoutRequest(LogoutParameters parameters)
        {
            return(HandleErrors(nameof(CreateLogoutRequest), () =>
            {
                var state = new LogoutState {
                    State = new Crypto().CreateUniqueHexadecimal(32)
                };
                var url = BuildAuthenticationUrl(parameters, state);

                return new LogoutRequest {
                    Url = url, State = state, Parameters = parameters
                };
            }));
        }
Example #4
0
        public LogoutRequest CreateLogoutRequest(LogoutParameters parameters)
        {
            return(HandleErrors(nameof(CreateLogoutRequest), () =>
            {
                var requestState = CreateOidcRequestState(new Crypto(), parameters.StateData);
                var state = new LogoutState
                {
                    State = Base64Url.Serialize(requestState, "oidc logout request state")
                };
                var url = BuildLogoutUrl(parameters, state);

                return new LogoutRequest {
                    Url = url, State = state, Parameters = parameters
                };
            }));
        }
        public void EnsureValidState(LogoutResponse response, LogoutState state)
        {
            if (response.State.IsEmpty())
            {
                Logger.LogDebug("No logout state in response");
                return;
            }
            if (state == null)
            {
                throw Logger.Exception("Storage does not contain the logout state");
            }
            if (state.State != response.State)
            {
                throw Logger.Exception("Logout state does not match with response");
            }

            Logger.LogDebug("Logout state is valid");
        }
Example #6
0
 public void ClientLogoutResponse(LogoutState state)
 {
     throw new NotImplementedException();
 }
 public Task SetLogoutState(LogoutState state)
 {
     return(HandleErrors(nameof(SetLogoutState), () => Storage.Set(LogoutStateKey, state)));
 }