コード例 #1
0
        private async Task SignIn()
        {
            // create a redirect URI using the custom redirect uri
            string redirectUri = string.Format(CustomUriScheme + "://callback");

            Console.WriteLine("redirect URI: " + redirectUri);

            var options = new OidcClientOptions
            {
                Authority   = Constants.Authority,
                ClientId    = "winconsole",
                Scope       = "openid profile scope1",
                RedirectUri = redirectUri,
            };

            var serilog = new LoggerConfiguration()
                          .MinimumLevel.Verbose()
                          .Enrich.FromLogContext()
                          .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message}{NewLine}{Exception}{NewLine}")
                          .CreateLogger();

            options.LoggerFactory.AddSerilog(serilog);

            var client = new OidcClient(options);
            var state  = await client.PrepareLoginAsync();

            Console.WriteLine($"Start URL: {state.StartUrl}");

            var callbackManager = new CallbackManager(state.State);

            // open system browser to start authentication
            Process.Start(state.StartUrl);

            Console.WriteLine("Running callback manager");
            var response = await callbackManager.RunServer();

            Console.WriteLine($"Response from authorize endpoint: {response}");

            // Brings the Console to Focus.
            BringConsoleToFront();

            var result = await client.ProcessResponseAsync(response, state);

            BringConsoleToFront();

            if (result.IsError)
            {
                Console.WriteLine("\n\nError:\n{0}", result.Error);
            }
            else
            {
                Console.WriteLine("\n\nClaims:");
                foreach (var claim in result.User.Claims)
                {
                    Console.WriteLine("{0}: {1}", claim.Type, claim.Value);
                }

                Console.WriteLine();

                if (!string.IsNullOrEmpty(result.IdentityToken))
                {
                    Console.WriteLine("Identity token:\n{0}", result.IdentityToken);
                }

                if (!string.IsNullOrEmpty(result.AccessToken))
                {
                    Console.WriteLine("Access token:\n{0}", result.AccessToken);
                }

                if (!string.IsNullOrWhiteSpace(result.RefreshToken))
                {
                    Console.WriteLine("Refresh token:\n{0}", result.RefreshToken);
                }
            }
        }