This repository has been archived by the owner on Dec 14, 2017. It is now read-only.
/
Program.cs
92 lines (77 loc) · 2.7 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using IdentityModel;
using IdentityModel.Client;
using IdentityModel.Extensions;
using Newtonsoft.Json.Linq;
using Sample;
using System;
using System.Net.Http;
using System.Security.Cryptography.X509Certificates;
using System.Text;
namespace ClientCertificateConsoleClient
{
class Program
{
static void Main(string[] args)
{
var response = RequestToken();
ShowResponse(response);
Console.ReadLine();
CallService(response.AccessToken);
}
static TokenResponse RequestToken()
{
var cert = new X509Certificate2("Client.pfx");
var handler = new WebRequestHandler();
handler.ClientCertificates.Add(cert);
var client = new TokenClient(
Constants.TokenEndpoint,
"clientcredentials.client",
handler);
return client.RequestClientCredentialsAsync("read write").Result;
}
static void CallService(string token)
{
var baseAddress = Constants.AspNetWebApiSampleApi;
var client = new HttpClient
{
BaseAddress = new Uri(baseAddress)
};
client.SetBearerToken(token);
var response = client.GetStringAsync("identity").Result;
"\n\nService claims:".ConsoleGreen();
Console.WriteLine(JArray.Parse(response));
}
private static void ShowResponse(TokenResponse response)
{
if (!response.IsError)
{
"Token response:".ConsoleGreen();
Console.WriteLine(response.Json);
if (response.AccessToken.Contains("."))
{
"\nAccess Token (decoded):".ConsoleGreen();
var parts = response.AccessToken.Split('.');
var header = parts[0];
var claims = parts[1];
Console.WriteLine(JObject.Parse(Encoding.UTF8.GetString(Base64Url.Decode(header))));
Console.WriteLine(JObject.Parse(Encoding.UTF8.GetString(Base64Url.Decode(claims))));
}
}
else
{
if (response.IsHttpError)
{
"HTTP error: ".ConsoleGreen();
Console.WriteLine(response.HttpErrorStatusCode);
"HTTP error reason: ".ConsoleGreen();
Console.WriteLine(response.HttpErrorReason);
}
else
{
"Protocol error response:".ConsoleGreen();
Console.WriteLine(response.Json);
}
}
}
}
}