示例#1
0
        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();
        }
示例#2
0
        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);
            }
        }