private async void Browser_Navigated(object sender, WebBrowserNavigatedEventArgs e) { try { int index = e.Url.PathAndQuery.IndexOf("code="); if (index >= 0) { var token = e.Url.PathAndQuery.Substring(index + "code=".Length); index = token.IndexOf("&"); if (index >= 0) { token = token.Substring(0, index); } var resourceId = (m_credential.SelectedServer != null) ? m_credential.SelectedServer.ResourceId : null; Browser.Visible = false; m_token = await m_client.RequestTokenWithAuthenticationCodeAsync(m_credential, resourceId, token); DialogResult = DialogResult.OK; } } catch (Exception exception) { ShowError(exception); } }
private async Task <OAuth2AccessToken> RequestTokenAsync(Uri url, Dictionary <string, string> fields) { HttpClient client = new HttpClient(); client.BaseAddress = url; client.DefaultRequestHeaders.Accept.Clear(); var content = new System.Net.Http.FormUrlEncodedContent(fields); HttpResponseMessage response = await client.PostAsync("", content); if (!response.IsSuccessStatusCode) { throw new HttpRequestException(response.ReasonPhrase); } OAuth2AccessToken token = new OAuth2AccessToken(); var strm = await response.Content.ReadAsStreamAsync(); var reader = new JsonTextReader(new System.IO.StreamReader(strm)); while (reader.Read()) { if (reader.TokenType == JsonToken.PropertyName) { string name = (string)reader.Value; reader.Read(); switch (name) { case "error": { throw new HttpRequestException((string)reader.Value); } case "resource": { token.ResourceId = (string)reader.Value; break; } case "scope": { token.Scope = (string)reader.Value; break; } case "refresh_token": { token.RefreshToken = (string)reader.Value; break; } case "expires_on": { long seconds = 0; if (Int64.TryParse((string)reader.Value, out seconds)) { token.ExpiresOn = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(seconds); } break; } case "access_token": { token.AccessToken = (string)reader.Value; break; } } } } return(token); }