public static async Task <LoginResult> Start(IBrowser browser)
        {
            //Do not use this in production environment.
            var handler = HttpClientExtensions.CreateHttpClientHandler(true);

            var options = new OidcClientOptions
            {
                Authority          = Config.IdentityServerUrl,
                BackchannelHandler = handler,
                Browser            = browser,
                ClientId           = "NativeClient",
                ClientSecret       = "KHG+TZ8aaVx2h3^!vJ65",
                FilterClaims       = false,
                Flow        = OidcClientOptions.AuthenticationFlow.AuthorizationCode,
                LoadProfile = true,
                Scope       = "openid profile Api1 Cluster",
                RedirectUri = Config.NativeClientUrl,
                RefreshTokenInnerHttpHandler = handler,
                ResponseMode = OidcClientOptions.AuthorizeResponseMode.Redirect
            };

            var client = new OidcClient(options);

            return(await client.LoginAsync(new LoginRequest()));
        }
        private static async Task <string> TryGetUserProfile(string accessToken)
        {
            if (string.IsNullOrWhiteSpace(accessToken))
            {
                throw  new ArgumentException();
            }

            var httpClient = new HttpClient(HttpClientExtensions.CreateHttpClientHandler(true));

            httpClient.SetBearerToken(accessToken);

            string result;

            var response = await httpClient.GetAsync($"{Common.Config.ApiUrl}/api/User/Alice");

            if (response.IsSuccessStatusCode)
            {
                result = await response.Content.ReadAsStringAsync();
            }
            else
            {
                result = response.ReasonPhrase;
            }

            return(result);
        }
        public async Task <IActionResult> Profile()
        {
            var accessToken = await _httpContextAccessor.HttpContext.GetTokenAsync("access_token");

            _logger.LogInformation(new EventId(LogEvents.AccessTokenRetrieved),
                                   $"Access Token: successfully retrieved.");

            var httpClient = new HttpClient(HttpClientExtensions.CreateHttpClientHandler(true));

            httpClient.SetBearerToken(accessToken);

            string result;

            var response = await httpClient.GetAsync($"{Common.Config.ApiUrl}/api/User/Alice");

            if (response.IsSuccessStatusCode)
            {
                result = await response.Content.ReadAsStringAsync();
            }
            else
            {
                result = response.ReasonPhrase;
            }

            ViewBag.Response = result;

            return(View("~/User/Profile.cshtml"));
        }