public static IApplicationBuilder UseClientSecretAuthentication(this IApplicationBuilder app, IContainerResolve container, IKeyValueSettings settings, string settingsSectionName) { if (null == app) { throw new ArgumentNullException(nameof(app)); } if (null == container) { throw new ArgumentNullException(nameof(container)); } if (null == settings) { throw new ArgumentNullException(nameof(settings)); } var option = new ClientSecretAuthenticationOption(settings); container.Resolve <IConfiguration>().Bind(settingsSectionName, option); return(app.UseMiddleware <ClientSecretAuthenticationMiddleware>(container, option)); }
public ClientSecretAuthenticationMiddleware(RequestDelegate next, IContainerResolve container, ClientSecretAuthenticationOption option) { _next = next ?? throw new ArgumentNullException(nameof(next)); if (null == container) { throw new ArgumentNullException(nameof(container)); } if (null == option) { throw new ArgumentNullException(nameof(option)); } _logger = container.Resolve <ILogger <ClientSecretAuthenticationMiddleware> >(); _option = option; if (null == option.Settings) { _logger.Technical().Warning("No settings have been provided.").Log(); return; } if (option.Settings.Values.ContainsKey(TokenKeys.ProviderIdKey)) { _hasProvider = container.TryResolve(option.Settings.Values[TokenKeys.ProviderIdKey], out _provider); } if (!_hasProvider) { _logger.Technical().Warning("No ClientSecret provider found. Skip ClientSecret capability.").Log(); return; } _hasCertificate = null != option.Certificate && !String.IsNullOrWhiteSpace(option.Certificate.SecretKey) && !String.IsNullOrWhiteSpace(option.Certificate.Name); // check the certificate exists. if (_hasCertificate) { try { var certificateInfo = new CertificateInfo { Name = option.Certificate.Name }; if (Enum.TryParse(option.Certificate.FindType, out X509FindType x509FindType)) { certificateInfo.FindType = x509FindType; } if (Enum.TryParse(option.Certificate.Location, out StoreLocation storeLocation_)) { certificateInfo.Location = storeLocation_; } if (Enum.TryParse(option.Certificate.StoreName, out StoreName storeName_)) { certificateInfo.StoreName = storeName_; } _certificate = Certificate.FindCertificate( certificateInfo.Name, certificateInfo.FindType, certificateInfo.Location, certificateInfo.StoreName); _logger.Technical().System($"Authentication with certificate secret activated.").Log(); } catch (KeyNotFoundException) { _hasCertificate = false; _logger.Technical().Error($"No certificate found with {option.Certificate.FindType} = {option.Certificate.Name} in location = {option.Certificate.Location}.").Log(); } catch (Exception ex) { _logger.Technical().Exception(ex).Log(); } } else { _logger.Technical().System($"No authentication with certificate secret.").Log(); } _activitySource = container.Resolve <IActivitySourceFactory>()?.GetArc4u(); }
public static IApplicationBuilder UseClientSecretAuthentication(this IApplicationBuilder app, IContainerResolve container, ClientSecretAuthenticationOption option) { if (null == app) { throw new ArgumentNullException(nameof(app)); } if (null == container) { throw new ArgumentNullException(nameof(container)); } if (null == option) { throw new ArgumentNullException(nameof(option)); } return(app.UseMiddleware <ClientSecretAuthenticationMiddleware>(container, option)); }