static async Task Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false) .Build(); HttpClientConfig clientConfig = new HttpClientConfig(); config.GetSection("HttpClientConfig").Bind(clientConfig); CertificateConfig certificateConfig = new CertificateConfig(); config.GetSection("CertificateConfig").Bind(certificateConfig); MaskinportenConfig maskinportenConfig = new MaskinportenConfig(); config.GetSection("MaskinportenConfig").Bind(maskinportenConfig); var host = new HostBuilder() .ConfigureServices((hostContext, services) => { services.Configure <RequestConfig>(config.GetSection("RequestConfig")); services.Configure <AccreditationConfig>(config.GetSection("Accreditation")); services.Configure <MaskinportenConfig>(config.GetSection("MaskinportenConfig")); services.Configure <CertificateConfig>(config.GetSection("CertificateConfig")); services.AddTransient <RequestService>(); services.AddTransient <AccreditationService>(); services.AddTransient <MaskinportenService>(); services.AddHttpClient("", c => { c.BaseAddress = new Uri(clientConfig.BaseAddress); c.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", clientConfig.SubscriptionKey); }); }).Build(); RequestService requestHandler = host.Services.GetRequiredService <RequestService>(); Console.WriteLine(await requestHandler.Demo()); await host.RunAsync(); }
public MaskinportenService(IOptions <MaskinportenConfig> maskinportenConfig, IOptions <CertificateConfig> certificateConfig) { _maskinportenConfig = maskinportenConfig.Value; _certificateConfig = certificateConfig.Value; switch (_maskinportenConfig.Environment.ToLower()) { case "ver2": _tokenEndpoint = "https://ver2.maskinporten.no/token"; _audience = "https://ver2.maskinporten.no/"; break; case "prod": _tokenEndpoint = "https://maskinporten.no/token"; _audience = "https://maskinporten.no/"; break; default: throw new ArgumentException("Invalid Maskinporten environment specified, must be either 'ver2' or 'prod'"); } _scopes = maskinportenConfig.Value.Scopes; _issuer = maskinportenConfig.Value.ClientId; // Thumbprint takes precendence if supplied if (!string.IsNullOrEmpty(_certificateConfig.Thumbprint)) { _signingCertificate = GetCertificateFromKeyStore(); } else { if (!File.Exists(_certificateConfig.Pkcs12FilePath)) { throw new ArgumentException("Unable to find PKCS#12 certificate at " + _certificateConfig.Pkcs12FilePath); } _signingCertificate = new X509Certificate2(); _signingCertificate.Import(File.ReadAllBytes(_certificateConfig.Pkcs12FilePath), _certificateConfig.Pkcs12FileSecret, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); } }