public async Task <IActionResult> Index() { // check for cached refresh token if (!Request.Cookies.ContainsKey("RefreshToken")) { // no cached token...check for authorization code in uri if (Request.Query.ContainsKey("code")) { // authorization code on request...finish the code authorization flow var token = await AuthUtil.GetTokenWithAuthorizationCode(Request.Query["code"]); if (token == null) { return(RedirectToAction("Error", "Home", new { msg = "Error completing code authorization flow" })); } else { // save refresh token and teams access token in cookie Response.Cookies.Append("RefreshToken", token.refresh_token); Response.Cookies.Append("TeamsAccessToken", token.access_token); // get skype token HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token.access_token); client.DefaultRequestHeaders.Add("Accept", "application/json"); var payloadString = ""; StringContent payload = new StringContent(payloadString, Encoding.UTF8, "application/json"); using (var resp = await client.PostAsync("https://api.teams.skype.com/beta/auth/skypetoken", payload)) { if (resp.IsSuccessStatusCode) { // save skype access token in cookie var json = JObject.Parse(await resp.Content.ReadAsStringAsync()); Response.Cookies.Append("SkypeAccessToken", json.SelectToken("tokens.skypeToken").Value <string>()); return(View()); } else { return(RedirectToAction("Error", "Home", new { msg = "Failed to secure skype token" })); } } } } else { return(Redirect(AuthUtil.GetAuthorizationRedirect())); } } else { return(View()); } }