/// <summary> /// Constructor. /// </summary> public SqlAuthenticationProviderManager(SqlAuthenticationProviderConfigurationSection configSection) { _typeName = GetType().Name; _providers = new ConcurrentDictionary <SqlAuthenticationMethod, SqlAuthenticationProvider>(); var authenticationsWithAppSpecifiedProvider = new HashSet <SqlAuthenticationMethod>(); _authenticationsWithAppSpecifiedProvider = authenticationsWithAppSpecifiedProvider; if (configSection == null) { return; } // Create user-defined auth initializer, if any. // if (!string.IsNullOrEmpty(configSection.InitializerType)) { try { var initializerType = Type.GetType(configSection.InitializerType, true); _initializer = (SqlAuthenticationInitializer)Activator.CreateInstance(initializerType); _initializer.Initialize(); } catch (Exception e) { throw SQL.CannotCreateSqlAuthInitializer(configSection.InitializerType, e); } } // add user-defined providers, if any. // if (configSection.Providers != null && configSection.Providers.Count > 0) { foreach (ProviderSettings providerSettings in configSection.Providers) { SqlAuthenticationMethod authentication = AuthenticationEnumFromString(providerSettings.Name); SqlAuthenticationProvider provider; try { var providerType = Type.GetType(providerSettings.Type, true); provider = (SqlAuthenticationProvider)Activator.CreateInstance(providerType); } catch (Exception e) { throw SQL.CannotCreateAuthProvider(authentication.ToString(), providerSettings.Type, e); } if (!provider.IsSupported(authentication)) { throw SQL.UnsupportedAuthenticationByProvider(authentication.ToString(), providerSettings.Type); } _providers[authentication] = provider; authenticationsWithAppSpecifiedProvider.Add(authentication); } } }
/// <summary> /// Set an authentication provider by method. /// </summary> /// <param name="authenticationMethod">Authentication method.</param> /// <param name="provider">Authentication provider.</param> /// <returns>True if succeeded, false otherwise, e.g., the existing provider disallows overriding.</returns> public bool SetProvider(SqlAuthenticationMethod authenticationMethod, SqlAuthenticationProvider provider) { if (!provider.IsSupported(authenticationMethod)) { throw SQL.UnsupportedAuthenticationByProvider(authenticationMethod.ToString(), provider.GetType().Name); } var methodName = "SetProvider"; if (_authenticationsWithAppSpecifiedProvider.Contains(authenticationMethod)) { _sqlAuthLogger.LogError(_typeName, methodName, $"Failed to add provider {GetProviderType(provider)} because a user-defined provider with type {GetProviderType(_providers[authenticationMethod])} already existed for authentication {authenticationMethod}."); return(false); } _providers.AddOrUpdate(authenticationMethod, provider, (key, oldProvider) => { if (oldProvider != null) { oldProvider.BeforeUnload(authenticationMethod); } if (provider != null) { provider.BeforeLoad(authenticationMethod); } _sqlAuthLogger.LogInfo(_typeName, methodName, $"Added auth provider {GetProviderType(provider)}, overriding existed provider {GetProviderType(oldProvider)} for authentication {authenticationMethod}."); return(provider); }); return(true); }
/// <summary> /// Set an authentication provider by method. /// </summary> /// <param name="authenticationMethod">Authentication method.</param> /// <param name="provider">Authentication provider.</param> /// <returns>True if succeeded, false otherwise, e.g., the existing provider disallows overriding.</returns> public bool SetProvider(SqlAuthenticationMethod authenticationMethod, SqlAuthenticationProvider provider) { if (!provider.IsSupported(authenticationMethod)) { throw SQL.UnsupportedAuthenticationByProvider(authenticationMethod.ToString(), provider.GetType().Name); } if (_authenticationsWithAppSpecifiedProvider.Contains(authenticationMethod)) { } _providers.AddOrUpdate(authenticationMethod, provider, (key, oldProvider) => { if (oldProvider != null) { oldProvider.BeforeUnload(authenticationMethod); } if (provider != null) { provider.BeforeLoad(authenticationMethod); } return(provider); }); return(true); }
/// <summary> /// Constructor. /// </summary> public SqlAuthenticationProviderManager(SqlAuthenticationProviderConfigurationSection configSection = null) { var methodName = "Ctor"; _typeName = GetType().Name; _providers = new ConcurrentDictionary <SqlAuthenticationMethod, SqlAuthenticationProvider>(); var authenticationsWithAppSpecifiedProvider = new HashSet <SqlAuthenticationMethod>(); _authenticationsWithAppSpecifiedProvider = authenticationsWithAppSpecifiedProvider; if (configSection == null) { _sqlAuthLogger.LogInfo(_typeName, methodName, "Neither SqlClientAuthenticationProviders nor SqlAuthenticationProviders configuration section found."); return; } if (!string.IsNullOrEmpty(configSection.ApplicationClientId)) { _applicationClientId = configSection.ApplicationClientId; _sqlAuthLogger.LogInfo(_typeName, methodName, "Received user-defined Application Client Id"); } else { _sqlAuthLogger.LogInfo(_typeName, methodName, "No user-defined Application Client Id found."); } // Create user-defined auth initializer, if any. if (!string.IsNullOrEmpty(configSection.InitializerType)) { try { var initializerType = Type.GetType(configSection.InitializerType, true); _initializer = (SqlAuthenticationInitializer)Activator.CreateInstance(initializerType); _initializer.Initialize(); } catch (Exception e) { throw SQL.CannotCreateSqlAuthInitializer(configSection.InitializerType, e); } _sqlAuthLogger.LogInfo(_typeName, methodName, "Created user-defined SqlAuthenticationInitializer."); } else { _sqlAuthLogger.LogInfo(_typeName, methodName, "No user-defined SqlAuthenticationInitializer found."); } // add user-defined providers, if any. if (configSection.Providers != null && configSection.Providers.Count > 0) { foreach (ProviderSettings providerSettings in configSection.Providers) { SqlAuthenticationMethod authentication = AuthenticationEnumFromString(providerSettings.Name); SqlAuthenticationProvider provider; try { var providerType = Type.GetType(providerSettings.Type, true); provider = (SqlAuthenticationProvider)Activator.CreateInstance(providerType); } catch (Exception e) { throw SQL.CannotCreateAuthProvider(authentication.ToString(), providerSettings.Type, e); } if (!provider.IsSupported(authentication)) { throw SQL.UnsupportedAuthenticationByProvider(authentication.ToString(), providerSettings.Type); } _providers[authentication] = provider; authenticationsWithAppSpecifiedProvider.Add(authentication); _sqlAuthLogger.LogInfo(_typeName, methodName, string.Format("Added user-defined auth provider: {0} for authentication {1}.", providerSettings?.Type, authentication)); } } else { _sqlAuthLogger.LogInfo(_typeName, methodName, "No user-defined auth providers."); } }