public OIDCClientInformation RegisterClient(string RegistrationEndpoint, OIDCClientInformation clientMetadata, string TokenEndpointAuthMethod = "client_secret_basic")
        {
            // Make registration request
            OIDCClientRegistrationRequest registrationRequest = new OIDCClientRegistrationRequest();

            registrationRequest.ApplicationType         = clientMetadata.ApplicationType;
            registrationRequest.RedirectUris            = clientMetadata.RedirectUris;
            registrationRequest.ResponseTypes           = clientMetadata.ResponseTypes;
            registrationRequest.TokenEndpointAuthMethod = TokenEndpointAuthMethod;

            // Check error and store client information from OP
            WebRequest request = WebRequest.Create(RegistrationEndpoint);
            Dictionary <string, object> returnedJson = PostUrlContent(request, registrationRequest, true);

            if (returnedJson.Keys.Contains("error"))
            {
                OIDCResponseError error = new OIDCResponseError();
                throw new OIDCException("Error while registering client: " + error.Error + "\n" + error.ErrorDescription);
            }

            OIDCClientInformation clientInformation = new OIDCClientInformation();

            clientInformation.deserializeFromDynamic(returnedJson);
            return(clientInformation);
        }