/// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        protected override ADPAccessToken getAccessToken()
        {
            ADPAccessToken token = accessToken;
            AuthorizationCodeConfiguration conconfig   = (AuthorizationCodeConfiguration)connectionConfiguration;
            Dictionary <string, string>    data        = null;
            AuthenticationHeaderValue      credentials = null;

            if (!isConnectedIndicator())
            {
                data = new Dictionary <string, string>();

                data.Add("client_id", conconfig.clientID);
                data.Add("client_secret", conconfig.clientSecret);
                data.Add("grant_type", conconfig.grantType);
                data.Add("code", conconfig.authorizationCode);
                data.Add("redirect_uri", conconfig.redirectURL);

                var encodedCredentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", connectionConfiguration.clientID, connectionConfiguration.clientSecret)));
                var result             = SendWebRequest(conconfig.tokenServerURL, data, credentials);

                if (!String.IsNullOrEmpty(result))
                {
                    token  = JSONUtil.Deserialize <ADPAccessToken>(result);
                    Status = "connected";
                }
            }

            return(token);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="JSONConfigObject"></param>
        /// <returns></returns>
        public override ConnectionConfiguration init(String JSONConfigObject)
        {
            AuthorizationCodeConfiguration ccfg = JSONUtil.Deserialize <AuthorizationCodeConfiguration>(JSONConfigObject);

            this.clientID       = ccfg.clientID;
            this.clientSecret   = ccfg.clientSecret;
            this.sslCertPath    = ccfg.sslCertPath;
            this.sslKeyPass     = ccfg.sslKeyPass;
            this.tokenServerURL = ccfg.tokenServerURL;
            this.apiRequestURL  = ccfg.apiRequestURL;
            // this.tokenExpiration = ccfg.tokenExpiration;
            this.accessScope = ccfg.accessScope;

            return(ccfg);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns>String</returns>
        public string getAuthorizationURL()
        {
            AuthorizationCodeConfiguration config = (AuthorizationCodeConfiguration)connectionConfiguration;

            string authorizationurl = null;

            if (config != null)
            {
                if (String.IsNullOrEmpty(config.baseAuthorizationURL))
                {
                    throw new Exception("Missing authorization url.");
                }

                if (String.IsNullOrEmpty(config.clientID) || String.IsNullOrEmpty(config.clientSecret))
                {
                    throw new Exception("Missing client information.");
                }

                if (String.IsNullOrEmpty(config.redirectURL))
                {
                    throw new Exception("Missing callback/redirect url information");
                }

                state = Guid.NewGuid().ToString();

                authorizationurl = String.Format("{0}?client_id={1}&response_type={2}&redirect_uri={3}&scope=openid&state={4}",
                                                 config.baseAuthorizationURL,
                                                 HttpUtility.UrlEncode(config.clientID),
                                                 HttpUtility.UrlEncode(config.responseType),
                                                 HttpUtility.UrlEncode(config.redirectURL),
                                                 HttpUtility.UrlEncode(state));
            }
            else
            {
                throw new ADPConnectionException("Authorization code configuration not available");
            }

            return(authorizationurl);
        }