コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }