Exemple #1
0
        // sample flow for Twitter authroize
        public async static Task <AccessToken> AuthorizeSample(string consumerKey, string consumerSecret)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get request token
            var tokenResponse = await authorizer.GetRequestToken("https://api.twitter.com/oauth/request_token");

            var requestToken = tokenResponse.Token;

            var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://api.twitter.com/oauth/authorize", requestToken);

            // open browser and get PIN Code
            Process.Start(pinRequestUrl);

            // enter pin
            Console.WriteLine("ENTER PIN");
            var pinCode = Console.ReadLine();

            // get access token
            var accessTokenResponse = await authorizer.GetAccessToken("https://api.twitter.com/oauth/access_token", requestToken, pinCode);

            // save access token.
            var accessToken = accessTokenResponse.Token;

            Console.WriteLine("Key:" + accessToken.Key);
            Console.WriteLine("Secret:" + accessToken.Secret);

            return(accessToken);
        }
Exemple #2
0
        // sample flow for Twitter authroize
        public async static Task<AccessToken> AuthorizeSample(string consumerKey, string consumerSecret)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get request token
            var tokenResponse = await authorizer.GetRequestToken("https://api.twitter.com/oauth/request_token");
            var requestToken = tokenResponse.Token;

            var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://api.twitter.com/oauth/authorize", requestToken);

            // open browser and get PIN Code
            Process.Start(pinRequestUrl);

            // enter pin
            Console.WriteLine("ENTER PIN");
            var pinCode = Console.ReadLine();

            // get access token
            var accessTokenResponse = await authorizer.GetAccessToken("https://api.twitter.com/oauth/access_token", requestToken, pinCode);

            // save access token.
            var accessToken = accessTokenResponse.Token;
            Console.WriteLine("Key:" + accessToken.Key);
            Console.WriteLine("Secret:" + accessToken.Secret);

            return accessToken;
        }
Exemple #3
0
 public IObservable <HttpClient> Authorize(string pincode)
 {
     return(authorizer.GetAccessToken(accessTokenUrl, requestToken, pincode)
            .ToObservable()
            .Do(x => Setting.AccessToken = x.Token)
            .Select(x => OAuthUtility.CreateOAuthClient(key, secret, x.Token)));
 }
Exemple #4
0
        /// <summary>
        /// GET USER ACCESS TOKEN
        /// </summary>
        /// <returns>OAuth1Credentials</returns>
        public async Task <AccessToken> ExchangeRequestTokenForAccessToken(RequestToken requestToken, string oAuthVerifier)
        {
            var authorizer = new OAuthAuthorizer(_consumerKey, _consumerSecret);
            TokenResponse <AccessToken> accessTokenResponse = await authorizer.GetAccessToken("https://oauth.withings.com/account/access_token", requestToken, oAuthVerifier);

            return(accessTokenResponse.Token);
        }
Exemple #5
0
 public void VerifyPin()
 {
     CurrentAuthenticationStep = AuthenticationStep.AuthorizingUser;
     Observable.Defer(() => _authorizer.GetAccessToken(AccessTokenEndpoint, _currentRequestToken, Pin).ToObservable())
     .Retry(3, TimeSpan.FromSeconds(3))
     .Subscribe(r =>
     {
         var id = long.Parse(r.ExtraData["user_id"].First());
         var sn = r.ExtraData["screen_name"].First();
         _returnSubject.OnNext(new TwitterAccount(id, sn, r.Token));
         this.Messenger.Raise(new WindowActionMessage(WindowAction.Close));
     },
                ex =>
     {
         CurrentAuthenticationStep = AuthenticationStep.WaitingPinInput;
         this.Messenger.Raise(new TaskDialogMessage(
                                  new TaskDialogOptions
         {
             Title           = "アクセス許可取得失敗",
             MainIcon        = VistaTaskDialogIcon.Error,
             MainInstruction = "アカウントを認証できませんでした。",
             Content         = "PINを確認しもう一度入力するか、最初からやり直してみてください。",
             CommonButtons   = TaskDialogCommonButtons.Close,
             FooterIcon      = VistaTaskDialogIcon.Information,
             FooterText      = "コンピュータの時計が大幅にずれている場合も認証が行えないことがあります。"
         }));
     });
 }
Exemple #6
0
        // sample flow for Hatena authroize
        public async static Task<AccessToken> AuthorizeSample(string consumerKey, string consumerSecret)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get request token
            var tokenResponse = await authorizer.GetRequestToken(
                "https://www.hatena.com/oauth/initiate",
                new[] { new KeyValuePair<string, string>("oauth_callback", "oob") },
                new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("scope", "read_public,write_public,read_private,write_private") }));
            var requestToken = tokenResponse.Token;

            var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://www.hatena.ne.jp/oauth/authorize", requestToken);

            // open browser and get PIN Code
            Process.Start(pinRequestUrl);

            // enter pin
            Console.WriteLine("ENTER PIN");
            var pinCode = Console.ReadLine();

            // get access token
            var accessTokenResponse = await authorizer.GetAccessToken("https://www.hatena.com/oauth/token", requestToken, pinCode);

            // save access token.
            var accessToken = accessTokenResponse.Token;
            Console.WriteLine("Key:" + accessToken.Key);
            Console.WriteLine("Secret:" + accessToken.Secret);

            return accessToken;
        }
Exemple #7
0
        // sample flow for Hatena authroize
        public async static Task <AccessToken> AuthorizeSample(string consumerKey, string consumerSecret)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get request token
            var tokenResponse = await authorizer.GetRequestToken(
                "https://www.hatena.com/oauth/initiate",
                new[] { new KeyValuePair <string, string>("oauth_callback", "oob") },
                new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("scope", "read_public,write_public,read_private,write_private") }));

            var requestToken = tokenResponse.Token;

            var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://www.hatena.ne.jp/oauth/authorize", requestToken);

            // open browser and get PIN Code
            Process.Start(pinRequestUrl);

            // enter pin
            Console.WriteLine("ENTER PIN");
            var pinCode = Console.ReadLine();

            // get access token
            var accessTokenResponse = await authorizer.GetAccessToken("https://www.hatena.com/oauth/token", requestToken, pinCode);

            // save access token.
            var accessToken = accessTokenResponse.Token;

            Console.WriteLine("Key:" + accessToken.Key);
            Console.WriteLine("Secret:" + accessToken.Secret);

            return(accessToken);
        }
Exemple #8
0
        // sample flow for Twitter authroize
        public static async Task<AccessToken> Authorize(string consumerKey, string consumerSecret)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get request token
            TokenResponse<RequestToken> tokenResponse = await authorizer.GetRequestToken(
                RequestTokenUrl,
                new[] {new KeyValuePair<string, string>("oauth_callback", "oob")});
            RequestToken requestToken = tokenResponse.Token;

            string pinRequestUrl = authorizer.BuildAuthorizeUrl(AuthorizeTokenUrl, requestToken);

            // open browser and get PIN Code
            Process.Start(pinRequestUrl);

            // enter pin
            System.Console.WriteLine("ENTER PIN");
            string pinCode = System.Console.ReadLine();

            // get access token
            TokenResponse<AccessToken> accessTokenResponse = await authorizer.GetAccessToken(AccessTokenUrl, requestToken, pinCode);

            // save access token.
            AccessToken accessToken = accessTokenResponse.Token;

            return accessToken;
        }
Exemple #9
0
        // sample flow for Twitter authroize
        public static async Task <AccessToken> Authorize(string consumerKey, string consumerSecret)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get request token
            TokenResponse <RequestToken> tokenResponse = await authorizer.GetRequestToken(
                RequestTokenUrl,
                new[] { new KeyValuePair <string, string>("oauth_callback", "oob") });

            RequestToken requestToken = tokenResponse.Token;

            string pinRequestUrl = authorizer.BuildAuthorizeUrl(AuthorizeTokenUrl, requestToken);

            // open browser and get PIN Code
            Process.Start(pinRequestUrl);

            // enter pin
            System.Console.WriteLine("ENTER PIN");
            string pinCode = System.Console.ReadLine();

            // get access token
            TokenResponse <AccessToken> accessTokenResponse = await authorizer.GetAccessToken(AccessTokenUrl, requestToken, pinCode);

            // save access token.
            AccessToken accessToken = accessTokenResponse.Token;

            return(accessToken);
        }
Exemple #10
0
        /// <summary>
        /// This action is the callback that Evernote will redirect to after 
        /// the call to Authorize above
        /// </summary>
        /// <param name="oauth_verifier"></param>
        /// <returns></returns>
        public ActionResult ObtainTokenCredentials(string oauth_verifier)
        {
            // Use the verifier to get all the user details we need and
            // store them in EvernoteCredentials
            if (oauth_verifier != null)
            {
                var result = OAuthAuthorizer.GetAccessToken(ConfigurationManager.AppSettings["Evernote.Url"] + "/oauth", SessionHelper.RequestToken as RequestToken, oauth_verifier, null, null).Result;
                EvernoteCredentials credentials = new EvernoteCredentials();
                credentials.AuthToken = result.Token.Key;

                // Parse the extra data
                credentials.Shard = Uri.UnescapeDataString(result.ExtraData["edam_shard"].FirstOrDefault());
                credentials.UserId = Uri.UnescapeDataString(result.ExtraData["edam_userId"].FirstOrDefault());
                var expires = Uri.UnescapeDataString(result.ExtraData["edam_expires"].FirstOrDefault());
                var expiresDateTime = new DateTime(1970, 1, 1).AddTicks(long.Parse(expires) * 10000);
                credentials.Expires = DateTime.SpecifyKind(expiresDateTime, DateTimeKind.Utc);
                credentials.NotebookUrl = Uri.UnescapeDataString(result.ExtraData["edam_noteStoreUrl"].FirstOrDefault());
                credentials.WebApiUrlPrefix = Uri.UnescapeDataString(result.ExtraData["edam_webApiUrlPrefix"].FirstOrDefault());

                SessionHelper.EvernoteCredentials = credentials;

                return Redirect(Url.Action("Authorized"));
            }
            else
            {
                return Redirect(Url.Action("Unauthorized"));
            }
        }
Exemple #11
0
        public async Task <AuthCredential> ProcessApprovedAuthCallbackAsync(RequestToken token)
        {
            if (token == null)
            {
                throw new ArgumentNullException("token", "RequestToken cannot be null");
            }

            if (string.IsNullOrWhiteSpace(token.Token))
            {
                throw new ArgumentNullException("token", "RequestToken.Token must not be null");
            }

            var oauthRequestToken = new AsyncOAuth.RequestToken(token.Token, token.Secret);
            var authorizer        = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
            var accessToken       = await authorizer.GetAccessToken(Constants.BaseApiUrl + Constants.TemporaryCredentialsAccessTokenUri, oauthRequestToken, token.Verifier);

            var result = new AuthCredential
            {
                AuthToken       = accessToken.Token.Key,
                AuthTokenSecret = accessToken.Token.Secret,
                UserId          = accessToken.ExtraData["encoded_user_id"].FirstOrDefault()
            };

            return(result);
        }
Exemple #12
0
        /// <summary>
        /// アクセストークン取得
        /// </summary>
        /// <param name="authorizer"></param>
        /// <param name="requestToken"></param>
        /// <returns></returns>
        private static async Task <AccessToken> GetAccessTokenAsync(OAuthAuthorizer authorizer, RequestToken requestToken, string username, string password)
        {
            var requestUri = new Uri(authorizer.BuildAuthorizeUrl(AuthorizeBaseUrl, requestToken));

            // rkmの取得にrkが必要
            var rk = await GetRkAsync(username, password);

            var handler = new HttpClientHandler()
            {
                AllowAutoRedirect = false
            };

            var client = new HttpClient(handler);

            client.DefaultRequestHeaders.Add("User-Agent", UserAgent);
            client.DefaultRequestHeaders.Add("Cookie", $"rk={rk}");

            // 認証の自動化にrkmが必要
            string rks = string.Empty;
            string rkm = string.Empty;

            using (var response = await client.GetAsync("http://b.hatena.ne.jp/my.name"))
            {
                var json = await response.Content.ReadAsStringAsync();

                rks = JObject.Parse(json).Value <string>("rks");
                rkm = JObject.Parse(json).Value <string>("rkm");
            }

            if (string.IsNullOrEmpty(rkm))
            {
                throw new HttpRequestException("rkm");
            }

            var param = new FormUrlEncodedContent(new Dictionary <string, string>
            {
                { "rkm", rkm },
                { "oauth_token", requestToken.Key },
                { "name", "%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B" }
            });

            // OAuth認証
            using (var response = await client.PostAsync(AuthorizeBaseUrl, param))
            {
                var responseData = response.Headers.Location;
                var regex        = new Regex(@"oauth_verifier=(.+)&?");
                var match        = regex.Match(responseData.Query);
                if (match.Success)
                {
                    var verifier            = Uri.UnescapeDataString(match.Groups[1].Value);
                    var accessTokenResponse = await authorizer.GetAccessToken(AccessTokenUrl, requestToken, verifier);

                    return(accessTokenResponse.Token);
                }
                else
                {
                    throw new HttpRequestException("failed to get the access token");
                }
            }
        }
        public async Task AuthorizeAsync()
        {
            if (IsAuthorized)
            {
                return;
            }

            await authorizationLock.WaitAsync();

            if (IsAuthorized)
            {
                return;
            }

            try
            {
                var authorizer           = new OAuthAuthorizer(consumerKey, consumerSecret);
                var requestTokenResponse = await authorizer.GetRequestToken(requestTokenUri, requestTokenParameters);

                var requestToekn  = requestTokenResponse.Token;
                var pinRequestUri = authorizer.BuildAuthorizeUrl(authorizeUri, requestToekn);
                var pinCode       = await retrievePin(pinRequestUri);

                var accessTokenResponse = await authorizer.GetAccessToken(accessTokenUri, requestToekn, pinCode);

                accessToken = accessTokenResponse.Token;
            }
            finally
            {
                authorizationLock.Release();
            }
        }
        protected async Task <TumblrCredentials> GetAccessToken(TumblrClientCredentials clientCredentials, string webAuthResultResponseData, string tokenSecret)
        {
            string responseData = webAuthResultResponseData.Substring(webAuthResultResponseData.IndexOf("oauth_token", StringComparison.Ordinal));

            if (responseData.EndsWith("#_=_"))
            {
                responseData = responseData.Substring(0, responseData.Length - 4);
            }
            string requestToken = null, oauthVerifier = null;

            String[] keyValPairs = responseData.Split('&');

            foreach (string t in keyValPairs)
            {
                String[] splits = t.Split('=');
                switch (splits[0])
                {
                case "oauth_token":
                    requestToken = splits[1];
                    break;

                case "oauth_verifier":
                    oauthVerifier = splits[1];
                    break;
                }
            }

            var authorizer = new OAuthAuthorizer(clientCredentials);

            var accessToken = await authorizer.GetAccessToken(AccessTokenUrl, new RequestToken(requestToken, tokenSecret), oauthVerifier).ConfigureAwait(false);

            return(new TumblrCredentials(accessToken.Token.Key, accessToken.Token.Secret));
        }
Exemple #15
0
 public void VerifyPin()
 {
     CurrentAuthenticationStep = AuthenticationStep.AuthorizingUser;
     Observable.Defer(() => _authorizer.GetAccessToken(AccessTokenEndpoint, _currentRequestToken, Pin).ToObservable())
     .Retry(3, TimeSpan.FromSeconds(3))
     .Subscribe(r =>
     {
         var id = long.Parse(r.ExtraData["user_id"].First());
         var sn = r.ExtraData["screen_name"].First();
         _returnSubject.OnNext(new TwitterAccount(id, sn, r.Token));
         CurrentAuthenticationStep = AuthenticationStep.AuthorizationCompleted;
         this.Messenger.RaiseSafe(() => new WindowActionMessage(WindowAction.Close));
     },
                ex =>
     {
         CurrentAuthenticationStep = AuthenticationStep.WaitingPinInput;
         this.Messenger.RaiseSafe(() => new TaskDialogMessage(new TaskDialogOptions
         {
             Title           = AuthorizationWindowResources.OAuthFailedTitle,
             MainIcon        = VistaTaskDialogIcon.Error,
             MainInstruction = AuthorizationWindowResources.OAuthFailedInst,
             Content         = AuthorizationWindowResources.OAuthFailedContent,
             CommonButtons   = TaskDialogCommonButtons.Close,
             FooterIcon      = VistaTaskDialogIcon.Information,
             FooterText      = AuthorizationWindowResources.OAuthErrorFooter
         }));
     });
 }
Exemple #16
0
            /// <summary>
            /// アプリケーション認証用の確認コードを使用して、アクセストークンを取得します。
            /// </summary>
            /// <param name="verifier">アプリケーション認証用の確認コード。</param>
            /// <returns>アクセストークンを返す非同期操作を表す <see cref="Task{TResult}"/> オブジェクト。</returns>
            /// <exception cref="ArgumentException"><paramref name="verifier"/> が空文字列です。</exception>
            /// <exception cref="ArgumentNullException"><paramref name="verifier"/> が <see langword="null"/> です。</exception>
            /// <exception cref="HttpRequestException">認証、もしくは HTTP リクエストに失敗しました。</exception>
            public async Task <OAuthToken> GetTokenAsync(string verifier)
            {
                Validation.NotNullOrEmpty(verifier, nameof(verifier));

                var accessTokenResponse = await _authorizer.GetAccessToken(_accessTokenUri, _requestToken, verifier);

                var accessToken = accessTokenResponse.Token;
                var hatenaId    = accessTokenResponse.ExtraData["url_name"].Single();

                return(new OAuthToken(this.ConsumerKey, this.ConsumerSecret, accessToken.Key, accessToken.Secret, hatenaId));
            }
        public async Task <AccessToken> VerifyUserAsync(string verifier)
        {
            ValidateAccessToken();

            const string accessUrl = AuthUrl + "/access_token/";

            OAuthAuthorizer             authorizer = new OAuthAuthorizer(_consumerKey, _consumerSecret);
            TokenResponse <AccessToken> response   = await authorizer.GetAccessToken(accessUrl, new RequestToken(AccessToken.Key, AccessToken.Secret), verifier).ConfigureAwait(false);

            AccessToken = response.Token;
            return(AccessToken);
        }
Exemple #18
0
 /// <summary>
 /// For Desktop authentication. Your code should direct the user to the FitBit website to get
 /// Their pin, they can then enter it here.
 /// </summary>
 /// <param name="pin"></param>
 /// <param name="token"></param>
 /// <returns></returns>
 public async Task<AuthCredential> GetAuthCredentialFromPinAsync(string pin, RequestToken token)
 {
     var oauthRequestToken = new AsyncOAuth.RequestToken(token.Token, token.Secret);
     var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
     var accessTokenResponse = await authorizer.GetAccessToken(Constants.BaseApiUrl + Constants.TemporaryCredentialsAccessTokenUri, oauthRequestToken, pin);
     // save access token.
     var accessToken = accessTokenResponse.Token;
     return new AuthCredential
     {
         AuthToken = accessToken.Key,
         AuthTokenSecret = accessToken.Secret
     };
 }
Exemple #19
0
        // sample flow for Twitter authroize
        public async static Task <AccessToken> GetAccessToken(string consumerKey, string consumerSecret, string pinCode)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get access token
            var accessTokenResponse = await authorizer.GetAccessToken("https://api.twitter.com/oauth/access_token", requestToken, pinCode);

            // save access token.
            var accessToken = accessTokenResponse.Token;

            return(accessToken);
        }
Exemple #20
0
        // sample flow for Hatena authroize
        public async static Task <AccessToken> AuthorizeSampleRedirect(string consumerKey, string consumerSecret)
        {
            // create authorizer
            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            // get request token
            var tokenResponse = await authorizer.GetRequestToken(
                "https://www.hatena.com/oauth/initiate",
                new[] { new KeyValuePair <string, string>("oauth_callback", "http://dev.clock-up.jp/redirect_to_app.php") },
                new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("scope", "read_public") }));

            var requestToken = tokenResponse.Token;

            //

            // ブラウザ起動
            var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://www.hatena.ne.jp/oauth/authorize", requestToken);

            Process.Start(pinRequestUrl);

            // 認証が成功すると、
            // http://dev.clock-up.jp/redirect_to_app.php?oauth_token=LjjaOIMY8fXTAA%3D%3D&oauth_verifier=77EbWdvM9KWG1Tjct%2FphLI%2Fp
            // のような形式でモノが来る

            // query to verifier -> verifier
            Console.WriteLine("ENTER QUERY PARAMETERS");
            var query = Console.ReadLine();

            string[] parameters = query.Split('&');
            string   verifier   = "";

            foreach (var p in parameters)
            {
                if (p.StartsWith("oauth_verifier="))
                {
                    verifier = p.Substring("oauth_verifier=".Length);
                }
            }
            var accessTokenResponse = await authorizer.GetAccessToken("https://www.hatena.com/oauth/token", requestToken, verifier);

            // get access token
            // var accessTokenResponse = await authorizer.GetAccessToken("https://www.hatena.com/oauth/token", requestToken, pinCode);

            // save access token.
            var accessToken = accessTokenResponse.Token;

            Console.WriteLine("Key:" + accessToken.Key);
            Console.WriteLine("Secret:" + accessToken.Secret);

            return(accessToken);
        }
Exemple #21
0
        /// <summary>
        /// For Desktop authentication. Your code should direct the user to the FitBit website to get
        /// Their pin, they can then enter it here.
        /// </summary>
        /// <param name="pin"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task <AuthCredential> GetAuthCredentialFromPinAsync(string pin, RequestToken token)
        {
            var oauthRequestToken   = new AsyncOAuth.RequestToken(token.Token, token.Secret);
            var authorizer          = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
            var accessTokenResponse = await authorizer.GetAccessToken(Constants.BaseApiUrl + Constants.TemporaryCredentialsAccessTokenUri, oauthRequestToken, pin);

            // save access token.
            var accessToken = accessTokenResponse.Token;

            return(new AuthCredential
            {
                AuthToken = accessToken.Key,
                AuthTokenSecret = accessToken.Secret
            });
        }
        public async Task <string> GetAccessToken(string pinCode)
        {
            var retMessage = String.Empty;

            try
            {
                var accessTokenResponse = await oAuthAuthorizer.GetAccessToken("https://www.hatena.com/oauth/token", oAuthRequestToken, pinCode);

                oAuthAccessToken = accessTokenResponse.Token;
            }
            catch (Exception ex)
            {
                retMessage = $"GetAccessTokenでエラーが発生しました。【内容】{ex.Message}";
            }

            return(retMessage);
        }
Exemple #23
0
        // sample flow for Hatena authroize
        public static async Task <AccessToken> Authorize()
        {
            m_verifier = "";

            var authorizer = new OAuthAuthorizer(HatenaConfig.CONSUMER_KEY, HatenaConfig.CONSUMER_SECRET);
            // get request token
            var tokenResponse = await authorizer.GetRequestToken(
                "https://www.hatena.com/oauth/initiate",
                new[] { new KeyValuePair <string, string>("oauth_callback", "http://dev.clock-up.jp/redirect_to_app.php") },
                new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("scope", "read_public") }));

            var requestToken = tokenResponse.Token;

            // ブラウザ起動
            var requestUrl = authorizer.BuildAuthorizeUrl("https://www.hatena.ne.jp/touch/oauth/authorize", requestToken);

            Device.OpenUri(new Uri(requestUrl));

            // 認証が成功すると、
            // http://dev.clock-up.jp/redirect_to_app.php?oauth_token=xxxxxx%3D%3D&oauth_verifier=xxxxxxxx%2FphLI%2Fp
            // のようなページが表示される。結果、アプリに呼び戻される

            // verifier が来るまで待つ
            while (true)
            {
                if (m_verifier == "CANCEL")
                {
                    return(null);
                }
                if (m_verifier != "")
                {
                    break;
                }
                await Task.Delay(500);
            }
            var accessTokenResponse = await authorizer.GetAccessToken("https://www.hatena.com/oauth/token", requestToken, m_verifier);

            // save access token.
            var accessToken = accessTokenResponse.Token;

            Debug.WriteLine("Key:" + accessToken.Key);
            Debug.WriteLine("Secret:" + accessToken.Secret);

            return(accessToken);
        }
Exemple #24
0
        // Get AccessToken flow sample
        // TokenResponse's ExtraData is ILookup.
        // if twitter, you can take "user_id" and "screen_name".
        private void GetAccessTokenButton_Click(object sender, RoutedEventArgs e)
        {
            var pincode = PinCodeTextBox.Text;

            var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);

            authorizer.GetAccessToken("http://twitter.com/oauth/access_token", requestToken, pincode)
            .ObserveOnDispatcher()
            .Subscribe(res =>
            {
                BrowserAuthorize.Visibility = System.Windows.Visibility.Collapsed;

                AuthorizedTextBlock.Text = "Authorized";
                UserIdTextBlock.Text     = res.ExtraData["user_id"].First();
                ScreenNameTextBlock.Text = res.ExtraData["screen_name"].First();
                accessToken = res.Token;
            }, ex => MessageBox.Show(ReadWebException(ex)));
        }
        public void AuthenticatePin()
        {
            Enforce.NotNull(_token);

            int pin;
            if (!int.TryParse(Pin, out pin))
                throw new InvalidOperationException("The PIN must be a number.");

            var authorizer = new OAuthAuthorizer(AppBootstrapper.ConsumerKey, AppBootstrapper.ConsumerSecret);
            authorizer.GetAccessToken("https://twitter.com/oauth/access_token", _token, Pin)
                .DispatcherSubscribe(
                    response =>
                    {
                        AppSettings.UserOAuthToken = response.Token.Key;
                        AppSettings.UserOAuthTokenSecret = response.Token.Secret;
                        _eventAggregator.Publish(new AuthenticatedMessage());
                    },
                    OnError);
        }
Exemple #26
0
        // Get AccessToken flow sample
        // TokenResponse's ExtraData is ILookup.
        // if twitter, you can take "user_id" and "screen_name".
        private void GetAccessTokenButton_Click(object sender, RoutedEventArgs e)
        {
            if (requestToken == null)
            {
                MessageBox.Show("at first, get requestToken"); return;
            }

            var pincode    = PinCodeTextBox.Text;
            var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);

            authorizer.GetAccessToken("http://twitter.com/oauth/access_token", requestToken, pincode)
            .ObserveOnDispatcher()
            .Subscribe(res =>
            {
                AuthorizedTextBlock.Text = "Authorized";
                UserIdTextBlock.Text     = res.ExtraData["user_id"].First();
                ScreenNameTextBlock.Text = res.ExtraData["screen_name"].First();
                accessToken = res.Token;
            }, ex => MessageBox.Show(ReadWebException(ex)));
        }
Exemple #27
0
        public async Task<AuthCredential> ProcessApprovedAuthCallbackAsync(RequestToken token)
        {
            if (token == null)
                throw new ArgumentNullException("token", "RequestToken cannot be null");

            if (string.IsNullOrWhiteSpace(token.Token))
                throw new ArgumentNullException("token", "RequestToken.Token must not be null");

            var oauthRequestToken = new AsyncOAuth.RequestToken(token.Token, token.Secret);
            var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
            var accessToken = await authorizer.GetAccessToken(Constants.BaseApiUrl + Constants.TemporaryCredentialsAccessTokenUri, oauthRequestToken, token.Verifier);

            var result = new AuthCredential
            {
                AuthToken = accessToken.Token.Key,
                AuthTokenSecret = accessToken.Token.Secret,
                UserId = accessToken.ExtraData["encoded_user_id"].FirstOrDefault()
            };
            return result;
        }
		public static IObservable<AccessTokenData> GetAccessToken(this TwitterClient client, string consumerKey, string consumerSecret, RequestToken token, string pincode)
		{
			var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);
			if (client.CurrentNetworkProfile != null)
			{
				if (client.CurrentNetworkProfile.Proxy != null)
				{
					authorizer.ApplyBeforeRequest += req => req.Proxy = client.CurrentNetworkProfile.Proxy.GetProxy();
				}
			}

			return Observable
				.Defer(() => authorizer.GetAccessToken(RestApi.OAuthEndpoints["oauth/access_token"].Url, token, pincode))
				.OnErrorRetry(3)
				.Select(res => new AccessTokenData
				{
					Token = res.Token,
					ScreenName = res.ExtraData["screen_name"].FirstOrDefault(),
					UserId = Convert.ToInt64(res.ExtraData["user_id"].FirstOrDefault()),
				});
		}
        //public async Task<AuthCredential> ProcessApprovedAuthCallbackAsync(RequestToken token)
        //{
        //    if (token == null)
        //        throw new ArgumentNullException("token", "RequestToken cannot be null");

        //    if (string.IsNullOrWhiteSpace(token.Token))
        //        throw new ArgumentNullException("token", "RequestToken.Token must not be null");

        //    var oauthRequestToken = new AsyncOAuth.RequestToken(token.Token, token.Secret);
        //    var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
        //    var accessToken = await authorizer.GetAccessToken(Constants.BaseApiUrl + Constants.TemporaryCredentialsAccessTokenUri, oauthRequestToken, token.Verifier);

        //    var result = new AuthCredential
        //    {
        //        AuthToken = accessToken.Token.Key,
        //        AuthTokenSecret = accessToken.Token.Secret,
        //        UserId = accessToken.ExtraData["encoded_user_id"].FirstOrDefault()
        //    };
        //    return result;
        //}
        public async Task <AccessToken> AccessTokenFlow(RequestToken requestToken, string oAuthVerifier)
        {
            //passing in the MVC where AccessTokenFlow=string oatuhtokens
            //seting the authorizer varable with consumerKey/Secret as in Withings. Will become variable for later injection
            //grab value in URL to place in varables

            var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);



            //send them out as access_tokens to get access granted by Withings
            var accessTokenResponse = await authorizer.GetAccessToken(Constants.BaseApiUrl + Constants.TemporaryCredentialsAccessTokenUri, requestToken, oAuthVerifier);

            var accessToken = accessTokenResponse.Token;

            //var result = new AuthCredential
            //{
            //    AuthToken = accessToken.Token.Key,
            //    AuthTokenSecret = accessToken.Token.Secret,
            //    UserId = accessToken.ExtraData["encoded_user_id"].FirstOrDefault()
            //};
            return(accessToken);
        }
        public void AuthenticatePin()
        {
            Enforce.NotNull(_token);

            int pin;

            if (!int.TryParse(Pin, out pin))
            {
                throw new InvalidOperationException("The PIN must be a number.");
            }

            var authorizer = new OAuthAuthorizer(AppBootstrapper.ConsumerKey, AppBootstrapper.ConsumerSecret);

            authorizer.GetAccessToken("https://twitter.com/oauth/access_token", _token, Pin)
            .DispatcherSubscribe(
                response =>
            {
                AppSettings.UserOAuthToken       = response.Token.Key;
                AppSettings.UserOAuthTokenSecret = response.Token.Secret;
                _eventAggregator.Publish(new AuthenticatedMessage());
            },
                OnError);
        }
Exemple #31
0
        /**********************************************************************************/

        public async Task <bool> Authorize()
        {
            Logger.Trace("Authorizing");

            if (string.IsNullOrEmpty(Login) || string.IsNullOrEmpty(Password))
            {
                StatusMessage    = "Nothing";
                LastErrorMessage = "Password or login are no set.";
                return(false);
            }

            IsAuthorized = false;

            var client = new HttpClient();

            try
            {
                var authorizer    = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
                var tokenResponse = await authorizer.GetRequestToken("http://api.zenmoney.ru/oauth/request_token");

                var requestToken = tokenResponse.Token;

                var pinRequestUrl = authorizer.BuildAuthorizeUrl("http://api.zenmoney.ru/access/", requestToken) + "&mobile";

                var authPage = await client.GetStringAsync(pinRequestUrl);

                var query = new FormUrlEncodedContent(new Collection <KeyValuePair <string, string> >()
                {
                    new KeyValuePair <string, string>("oauth_callback", "http://grtisenko.biz/zenmoney"),
                    new KeyValuePair <string, string>("login", Login),
                    new KeyValuePair <string, string>("password", Password)
                });

                var request = await client.PostAsync(pinRequestUrl, query);

                if (request.StatusCode == HttpStatusCode.OK)
                {
                    var responseStr = await request.Content.ReadAsStringAsync();

                    //LastErrorMessage = responseStr;
                    throw new UnauthorizedAccessException("Json content: " + responseStr);
                }

                var args = HttpUtil.ParseQueryString(request.RequestMessage.RequestUri.ToString());

                var verificationCode = Uri.UnescapeDataString(args["oauth_verifier"]);

                var accessTokenResponse = await authorizer.GetAccessToken("http://api.zenmoney.ru/oauth/access_token", requestToken, verificationCode);

                _accessToken = accessTokenResponse.Token;

                IsAuthorized = true;
            }
            catch (HttpRequestException httpEx)
            {
                LastErrorMessage = "Ошибка подключения к серверу: " + httpEx.Message;
                Logger.LogException <ZenmoneyClient>(httpEx, "Authorization faild, due http request exception");
            }
            catch (Exception ex)
            {
                LastErrorMessage = "Неправильное имя пользователя или пароль";
                Logger.LogException <ZenmoneyClient>(ex, "Authorization faild");
            }
            finally
            {
                client.Dispose();
            }
            return(IsAuthorized);
        }
    static void Main(string[] args)
    {
        ServicePointManager.Expect100Continue = false;

        // set your consumerkey/secret
        const string ConsumerKey    = "";
        const string ConsumerSecret = "";

        AccessToken accessToken = null;
        string      userId, screenName;

        // get accesstoken flow
        // create authorizer and call "GetRequestToken" ,"BuildAuthorizeUrl", "GetAccessToken"
        // TokenResponse's ExtraData is ILookup.
        // if twitter, you can take "user_id" and "screen_name".
        // Run is sync. Subscribe is async.
        var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);

        authorizer.GetRequestToken("http://twitter.com/oauth/request_token")
        .Do(r =>
        {
            Console.WriteLine("Check Browser and input PinCode");
            Process.Start(authorizer.BuildAuthorizeUrl("http://twitter.com/oauth/authorize", r.Token));      // open browser
        })
        .Select(r => new { RequestToken = r.Token, PinCode = Console.ReadLine() })
        .SelectMany(a => authorizer.GetAccessToken("http://twitter.com/oauth/access_token", a.RequestToken, a.PinCode))
        .ForEach(r =>
        {
            userId      = r.ExtraData["user_id"].First();
            screenName  = r.ExtraData["screen_name"].First();
            accessToken = r.Token;
        });

        // get accesstoken flow by xAuth
        //new OAuthAuthorizer(ConsumerKey, ConsumerSecret)
        //    .GetAccessToken("https://api.twitter.com/oauth/access_token", "username", "password")
        //    .Run(r => accessToken = r.Token);


        // get timeline flow
        // set parameters can use Collection Initializer
        // if you want to set webrequest parameters then use ApplyBeforeRequest
        var client = new OAuthClient(ConsumerKey, ConsumerSecret, accessToken)
        {
            Url                = "http://api.twitter.com/1/statuses/home_timeline.xml",
            Parameters         = { { "count", 20 }, { "page", 1 } },
            ApplyBeforeRequest = req => { req.Timeout = 1000; req.UserAgent = "ReactiveOAuth"; }
        };

        client.GetResponseText()
        .Select(s => XElement.Parse(s))
        .ForEach(x => Console.WriteLine(x.ToString()));

        // post flow
        // if post then set MethodType = MethodType.Post
        //new OAuthClient(ConsumerKey, ConsumerSecret, accessToken)
        //{
        //    MethodType = MethodType.Post,
        //    Url = "http://api.twitter.com/1/statuses/update.xml",
        //    Parameters = { { "status", "PostTest from ReactiveOAuth" } }
        //}.GetResponseText()
        //    .Select(s => XElement.Parse(s))
        //    .Run(x => Console.WriteLine("Post Success:" + x.Element("text")));

        // StreamingAPI sample
        // if you use streaming api, recommend call GetResponseLines.
        // see details -> WPF Sample.
        //new OAuthClient(ConsumerKey, ConsumerSecret, accessToken)
        //{
        //    Url = "https://userstream.twitter.com/2/user.json"
        //}.GetResponseLines()
        //.Run(s => Console.WriteLine(s));
    }
        private void WbLoginOnNavigating(object sender, NavigatingEventArgs e)
        {
            if (e.Uri.ToString().StartsWith("http://localhost/myapp")) {
                var splitted = e.Uri.ToString().Split('&').Select(s => s.Split('=')).ToDictionary(s => s.First(), s => s.Last());
                if (!splitted.ContainsKey("oauth_verifier")) {
                    ((Storyboard)Resources["HidePopupAnimation"]).Begin();
                    return;
                }
                string verifier = splitted["oauth_verifier"];
                var authorizer = new OAuthAuthorizer(ConsumerKey, ConsumerSecret);
                authorizer.GetAccessToken(BaseUrl + "/oauth", requestToken, verifier)
                    .ObserveOnDispatcher()
                    .Subscribe(res => {
                        try {
                            AuthenticationResult result = new AuthenticationResult();
                            result.AuthenticationToken = Uri.UnescapeDataString(res.Token.Key);
                            result.NoteStoreUrl = Uri.UnescapeDataString(res.ExtraData["edam_noteStoreUrl"].First());
                            result.Expiration = long.Parse(res.ExtraData["edam_expires"].First());
                            result.WebApiUrlPrefix = Uri.UnescapeDataString(res.ExtraData["edam_webApiUrlPrefix"].First());
                            result.User = new User();
                            result.User.Id = int.Parse(res.ExtraData["edam_userId"].First());
                            MessageBox.Show("Login Success. Token is " + result.AuthenticationToken);
                        }
                        catch (KeyNotFoundException) {

                        }
                        finally {
                            ((Storyboard)Resources["HidePopupAnimation"]).Begin();
                        }
                    });

                e.Cancel = true;
                wbLogin.Visibility = Visibility.Collapsed;
            }
        }
        /// <summary>
        /// Get linkedin access token from uri
        /// </summary>
        private void handleLinkedInAuthorization(Uri uri)
        {
            var results = GeneralUtils.GetQueryParameters(uri);

              // If no verifier or query, we return to page
              if (results == null || !results.ContainsKey("oauth_verifier"))
              {
            liFailedAndGoBack();
            return;
              }

              // Handle no linkedin request token
              if (li_requestToken == null)
              {
            liFailedAndGoBack();
            return;
              }

              // clean up
              StorageUtils.RemoveData(Constants.LI_TOKEN);

              // Get access token
              string verifyPin = results["oauth_verifier"];
              var authorizer = new OAuthAuthorizer(SWLinkedInSettings.ConsumerKey, SWLinkedInSettings.ConsumerSecret);
              authorizer.GetAccessToken(SWLinkedInSettings.AccessTokenUri, this.li_requestToken, verifyPin)
            .ObserveOnDispatcher()
            .Subscribe(res =>
            {
              if (res == null)
              {
            liFailedAndGoBack();
            return;
              }
              SWLinkedInSettings.SetAccessToken(res.Token);
              // Notify UI that linkedin is now connected
              PhoneApplicationService.Current.State[Constants.AUTH_NOTIFICATION] = "LinkedIn is now enabled!";
              goBack();
            });
        }
Exemple #35
0
        public async Task <ActionResult> AccessTokenFlow()
        {
            //seting the authorizer varable with consumerKey/Secret as in Withings. Will become variable for later injection
            //grab value in URL to place in varables

            var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);

            var accessToken   = Request.QueryString["oauth_token"].ToString();
            var oAuthVerifier = Request.QueryString["oauth_verifier"].ToString();
            List <KeyValuePair <string, string> > parameters = new List <KeyValuePair <string, string> >();

            parameters.Add(new KeyValuePair <string, string>("oauth_token", accessToken));



            //  List<KeyValuePair<string, string>> parameters = new List<KeyValuePair<string, string>>();
            //   parameters.Add(new KeyValuePair<string, string>("oauth_verifier", oAuthVerifier));

            var requestToken = Session["requestToken"] as RequestToken;

            //send them out as access_tokens to get access granted by Withings
            var accessTokenResponse = await authorizer.GetAccessToken("https://oauth.withings.com/account/access_token", requestToken, oAuthVerifier);

            var accessTokens = accessTokenResponse.Token;

            string userId = Request.QueryString["userid"]; //todo: Find out how to assign the real user id from OAuth call



            var client = OAuthUtility.CreateOAuthClient(consumerKey, consumerSecret, accessTokens);


            //string withingsDateApiUrl = "&date=";

            //string withingsStartDateApiUrl = "&startdateymd=";

            //string withingsEndDateApiUrl = "&enddateymd=";
            //DateTime date = DateTime.Now;
            //string dateFormat = date.ToString("yyyy-MM-dd");
            //string startDateFormat = "2017-03-10";

            //string endDateFormat = "2017-03-21";

            // string dateFormat = "2017-03-13";

            //string oauthenticator = "&"+consumerSecret+"&"+accessToken;
            var oAuth_params = OAuthUtility.BuildBasicParameters(consumerKey, consumerSecret, "https://wbsapi.withings.net", HttpMethod.Get, accessTokens)
                               .Where(p => p.Key != "oauth_signature")
                               .OrderBy(p => p.Key);


            string requestUri = $"https://wbsapi.withings.net/measure?action=getmeas&userid={userId}&";

            requestUri += string.Join("&", oAuth_params.Select(kvp => kvp.Key + "=" + kvp.Value));

            var signature = OAuthUtility.BuildBasicParameters(consumerKey, consumerSecret, requestUri, HttpMethod.Get, accessTokens)
                            .First(p => p.Key == "oauth_signature").Value;

            string json = await client.GetStringAsync(requestUri + "&oauth_signature=" + signature);

            var o = JObject.Parse(json);

            int updateTime = (int)o["body"]["updatetime"];

            ViewBag.measureGroups = o["body"]["measuregrps"].Select(no => new
            {
                GroupId = no["grpid"],
                Attrib  = no["attrib"]
            });

            ViewBag.serializedResult = "JsonData";
            return(View("AccessTokenFlow"));
        }