/// <summary>
        /// GetAuthenticationMethods method implmentation
        /// </summary>
        public override List <AvailableAuthenticationMethod> GetAuthenticationMethods(AuthenticationContext ctx)
        {
            if (!IsInitialized)
            {
                throw new Exception("Provider not initialized !");
            }

            List <AvailableAuthenticationMethod> result = GetSessionData(this.Kind, ctx);

            if (result != null)
            {
                return(result);
            }
            else
            {
                result = new List <AvailableAuthenticationMethod>();
                GetAvailableAuthenticationMethodsResponse authMethods = GetAzureAvailableAuthenticationMethods(ctx);

                foreach (AuthenticationMethod current in authMethods.AuthenticationMethods)
                {
                    AvailableAuthenticationMethod item = GetAuthenticationMethodProperties(current);
                    if (item.Method != AuthenticationResponseKind.Error)
                    {
                        item.IsDefault = current.IsDefault;
                        result.Add(item);
                    }
                }
                if (result.Count > 0)
                {
                    SaveSessionData(this.Kind, ctx, result);
                }
            }
            return(result);
        }
        /// <summary>
        /// GetAuthenticationMethods method implmentation
        /// </summary>
        public override List <AvailableAuthenticationMethod> GetAuthenticationMethods(AuthenticationContext ctx)
        {
            if (!IsInitialized)
            {
                throw new Exception("Provider not initialized !");
            }

            List <AvailableAuthenticationMethod> result = GetSessionData(this.Kind, ctx);

            if (result != null)
            {
                return(result);
            }
            else
            {
                result = new List <AvailableAuthenticationMethod>();
#if !azuretest
                GetAvailableAuthenticationMethodsResponse authMethods = GetAzureAvailableAuthenticationMethods(ctx);
                foreach (AuthenticationMethod current in authMethods.AuthenticationMethods)
                {
                    AvailableAuthenticationMethod item = GetAuthenticationMethodProperties(current);
                    if (item.Method != AuthenticationResponseKind.Error)
                    {
                        item.IsDefault = current.IsDefault;
                        result.Add(item);
                    }
                }
#else
                AuthenticationMethod current1 = new AuthenticationMethod()
                {
                    Id = "OneWaySMS", IsDefault = true
                };
                current1.Properties.Add("MobilePhone", "+33 123123456");
                AuthenticationMethod current2 = new AuthenticationMethod()
                {
                    Id = "TwoWaySMS", IsDefault = false
                };
                current2.Properties.Add("MobilePhone", "+33 123123456");
                AvailableAuthenticationMethod item1 = GetAuthenticationMethodProperties(current1);
                item1.IsDefault = current1.IsDefault;
                result.Add(item1);
                AvailableAuthenticationMethod item2 = GetAuthenticationMethodProperties(current2);
                item2.IsDefault = current2.IsDefault;
                result.Add(item2);
#endif
                if (result.Count > 0)
                {
                    SaveSessionData(this.Kind, ctx, result);
                }
            }
            return(result);
        }