public static RedirectHttpListener Start(string expectedState) { var listener = new TcpListener(IPAddress.Loopback, 0); listener.Start(); var port = ((IPEndPoint)listener.LocalEndpoint).Port; listener.Stop(); var redirectUri = string.Format("http://{0}:{1}/", IPAddress.Loopback, port); var httpListener = new HttpListener(); httpListener.Prefixes.Add(redirectUri); httpListener.Start(); var result = new RedirectHttpListener(redirectUri, httpListener, expectedState); return(result); }
public async Task <string> GetUserInfoAsync() { var state = GetRandomBase64(32); var codeVerifier = GetRandomBase64(32); var codeChallenge = ComputeHash(codeVerifier); using (var webServer = RedirectHttpListener.Start(state)) { var url = BuildAuthorizationUrl(webServer.RedirectUri, state, codeChallenge); var browser = Process.Start(url); var accessCode = await webServer.GetAccessCodeAsync(); var tokens = await GetAccessTokenInfoAsync(accessCode, codeVerifier, webServer.RedirectUri); Console.WriteLine("--- ID Token ---"); Console.WriteLine(tokens.IdToken); Console.WriteLine("--- Refresh Token ---"); Console.WriteLine(tokens.RefreshToken); return(await GetUserInfoAsync(tokens.AccessToken)); } }