private static ClientAuthorizationSettings GetAuthSettingsVersion1(ILeverConfiguration configuration, string client)
        {
            // Note: We can't just use configuration.Value<ClientAuthorizationSettings>($"{client}-authentication")
            // because we get exception "Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken".
            // See ServiceAuthenticationHelperTest.ShowWhyWeHaveToMakeWorkaroundInServiceAuthenticationHelper
            var tenantClientSetting = configuration?.Value <JObject>($"{client}-authentication");

            if (tenantClientSetting == null)
            {
                var shared = configuration?.Value <JToken>("shared-client-authentications");
                if (shared != null)
                {
                    if (shared.Type != JTokenType.Array)
                    {
                        const string message = "Configuration error. The value for 'shared-client-authentications' must be an array.";
                        Log.LogCritical(message);
                        throw new FulcrumAssertionFailedException(message);
                    }

                    var sharedSettings = JsonConvert.DeserializeObject <List <ClientAuthorizationSettings> >(shared.ToString());
                    var setting        = sharedSettings?.FirstOrDefault(x => x.UseForClients.Contains(client));
                    if (setting != null)
                    {
                        tenantClientSetting = JObject.FromObject(setting);
                    }
                }
            }

            if (tenantClientSetting == null)
            {
                tenantClientSetting = JObject.FromObject(new ClientAuthorizationSettings {
                    AuthorizationType = ClientAuthorizationSettings.AuthorizationTypeEnum.None
                });
            }

            var authSettings = JsonConvert.DeserializeObject <ClientAuthorizationSettings>(tenantClientSetting.ToString());

            FulcrumAssert.IsNotNull(authSettings, null, "Expected non-null auth settings");
            FulcrumAssert.IsNotNull(authSettings.AuthorizationType, null, "Expected AuthorizationType");

            return(authSettings);
        }
        private static Dictionary <string, ClientAuthorizationSettings> GetAuthentications(ILeverConfiguration configuration)
        {
            var authenticationsAsJToken = configuration?.Value <JToken>("Authentications");

            if (authenticationsAsJToken == null)
            {
                return(null);
            }
            var authentications = JsonConvert.DeserializeObject <List <ClientAuthorizationSettings> >(authenticationsAsJToken.ToString());

            return(authentications.ToDictionary(x => x.Id, x => x));
        }
        public static Dictionary <string, ClientConfiguration> GetClientsConfigurations(ILeverConfiguration configuration)
        {
            var tenantClientSettingJToken = configuration?.Value <JToken>("Clients");

            if (tenantClientSettingJToken == null)
            {
                return(null);
            }
            var clientConfigurations = JsonConvert.DeserializeObject <List <ClientConfiguration> >(tenantClientSettingJToken.ToString());

            return(clientConfigurations.ToDictionary(x => x.Name, x => x));
        }