private static bool TryGetAccessToken(string authUrl, string apiKey, CredentialsModel model, out string accessToken) { var success = false; accessToken = null; try { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Authorization = CreateBasicAuthorizationHeader(model.Username, model.Password); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Add("api-key", apiKey); var result = httpClient.GetAsync(authUrl).Result; if (result.IsSuccessStatusCode) { var content = result.Content.ReadAsStringAsync().Result; dynamic json = JsonConvert.DeserializeObject(content); if (!string.IsNullOrWhiteSpace(json.AccessToken.Value)) { accessToken = json.AccessToken; success = true; } } } } catch (Exception ex) { var baseException = ex.GetBaseException(); } return success; }
public ActionResult Login(CredentialsModel model) { if (ModelState.IsValid) { string accessToken; string username; if (TryGetAccessToken(INAUTHURL, INAPIKEY, model, out accessToken) && TryGetUserName(INUSERSMEURL, INAPIKEY, accessToken, out username)) { var ticket = new FormsAuthenticationTicket(1, username, DateTime.UtcNow, DateTime.MaxValue, true, accessToken); var encryptedTicket = FormsAuthentication.Encrypt(ticket); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); Response.AppendCookie(cookie); return RedirectToRoute("Chat"); } else { ModelState.AddModelError("Username", "Invalid Credentials"); return Login(); } } else { return Login(); } }