Ejemplo n.º 1
0
        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));
            }
        }