public void ExportPublicKeyTest() { var rsa = new RSACryptoServiceProvider(); rsa.ImportPrivateKey(privatekeypem); rsa.ExportPublicKey(@"RSAKeys\GeneratedPublic.pem"); var generated = File.ReadAllText(@"RSAKeys\GeneratedPublic.pem"); generated = Regex.Replace(generated, "\r", ""); generated = Regex.Replace(generated, "\n", ""); var source = File.ReadAllText(@"RSAKeys\public.pem"); source = Regex.Replace(source, "\r", ""); source = Regex.Replace(source, "\n", ""); Assert.AreEqual(generated, source); }
static async Task Main(string[] args) { var handler = new HttpClientHandler { ServerCertificateCustomValidationCallback = delegate { return(true); } }; using var authClient = new HttpClient(handler) { BaseAddress = new Uri("https://localhost:7001") }; var csParams = new CspParameters { KeyContainerName = "client_secret_container", Flags = CspProviderFlags.UseDefaultKeyContainer, }; using var rsa = new RSACryptoServiceProvider(2048, csParams) { PersistKeyInCsp = false }; var publicKey = rsa.ExportPublicKey(); rsa.PersistKeyInCsp = false; var computeHash = MD5.Create().ComputeHash(rsa.ExportRSAPublicKey()); var username = Convert.ToBase64String(computeHash); Console.WriteLine($"username: {username}"); string secret; if (File.Exists("secret.txt")) { secret = File.ReadAllText("secret.txt"); } else { secret = Guid.NewGuid().ToString(); File.WriteAllText("secret.txt", secret); } var user = new UserRegistration { ClientId = username, Secret = secret, Name = "Console app" }; var content = new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json"); var result = await authClient.PostAsync("account/register", content); Console.WriteLine(result.StatusCode); Console.WriteLine(await result.Content.ReadAsStringAsync()); if (result.StatusCode != HttpStatusCode.Created) { throw new Exception(await result.Content.ReadAsStringAsync()); } var tokenContent = new FormUrlEncodedContent(new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("grant_type", "client_credentials"), new KeyValuePair <string, string>("client_id", username), new KeyValuePair <string, string>("client_secret", secret) }); var login = await authClient.PostAsync("connect/token", tokenContent); var token = JsonConvert.DeserializeObject <JObject>(await login.Content.ReadAsStringAsync()) .SelectToken("access_token") .Value <string>(); using var resourceClient = new HttpClient(handler); resourceClient.BaseAddress = new Uri("http://localhost:7002"); var resourceResult = await resourceClient.GetAsync("/protected-resource"); if (resourceResult.StatusCode != HttpStatusCode.Unauthorized) { throw new Exception("Request should be unauthorized"); } resourceClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); resourceResult = await resourceClient.GetAsync("/protected-resource"); Console.WriteLine(await resourceResult.Content.ReadAsStringAsync()); Console.ReadLine(); }