Esempio n. 1
0
        public void generatecode()
        {
            //var oAuthDesktopMobileAuthCodeGrant = new OAuthDesktopMobileAuthCodeGrant(ClientId);

            string ClientSecret = "*****************";

            var oAuthWebAuthCodeGrant = new OAuthWebAuthCodeGrant(ClientId, ClientSecret, new Uri("http://localhost:52713/Default"), null);


            // It is recommended that you specify a non guessable 'state' request parameter to help prevent
            // cross site request forgery (CSRF).
            oAuthWebAuthCodeGrant.State = "ClientStateGoesHere";

            Response.Redirect(oAuthWebAuthCodeGrant.GetAuthorizationEndpoint().ToString());
        }
Esempio n. 2
0
        /// <summary>
        /// Controls the contents displayed at Index.cshtml.
        /// </summary>
        public async Task <ActionResult> bing()
        {
            try
            {
                // If there is already an authenticated Microsoft account during this HTTP session,
                // go ahead and call Bing Ads service operations.

                if (Session["auth"] != null)
                {
                    return(await CallBingAdsServices((OAuthWebAuthCodeGrant)Session["auth"]));
                }

                // Prepare the OAuth object for use with the authorization code grant flow.

                var oAuthWebAuthCodeGrant = new OAuthWebAuthCodeGrant(ClientId, ClientSecret, new Uri(RedirectionUri));

                // It is recommended that you specify a non guessable 'state' request parameter to help prevent
                // cross site request forgery (CSRF).
                oAuthWebAuthCodeGrant.State = ClientState;

                // When calling Bing Ads services with ServiceClient or BulkServiceManager, each will refresh your access token
                // automatically if they detect the AuthenticationTokenExpired (109) error code.
                // As a best practice you should always use the most recent provided refresh token.
                // Save the refresh token whenever new OAuth tokens are received by subscribing to the NewOAuthTokensReceived event handler.

                oAuthWebAuthCodeGrant.NewOAuthTokensReceived +=
                    (sender, args) => SaveRefreshToken(args.NewRefreshToken);

                // If a refresh token is already present, use it to request new access and refresh tokens.

                if (RefreshTokenExists())
                {
                    // To force the authorization prompt, you can clear a previous refresh token.
                    DeleteRefreshToken();

                    await oAuthWebAuthCodeGrant.RequestAccessAndRefreshTokensAsync(GetRefreshToken());

                    // Save the authentication object in a session for future requests.
                    Session["auth"] = oAuthWebAuthCodeGrant;

                    return(await CallBingAdsServices((OAuthWebAuthCodeGrant)Session["auth"]));
                }

                // If the current HTTP request is a callback from the Microsoft Account authorization server,
                // use the current request url containing authorization code to request new access and refresh tokens
                if (Request["code"] != null)
                {
                    if (oAuthWebAuthCodeGrant.State != ClientState)
                    {
                        throw new HttpRequestException("The OAuth response state does not match the client request state.");
                    }

                    await oAuthWebAuthCodeGrant.RequestAccessAndRefreshTokensAsync(Request.Url);

                    // Save the authentication object in a session for future requests.
                    Session["auth"] = oAuthWebAuthCodeGrant;

                    return(await CallBingAdsServices((OAuthWebAuthCodeGrant)Session["auth"]));
                }

                // If there is no refresh token saved and no callback from the authorization server,
                // then connect to the authorization server and request user consent.
                return(Redirect(oAuthWebAuthCodeGrant.GetAuthorizationEndpoint().ToString()));
            }
            // OAuth classes can throw OAuthTokenRequestException
            catch (OAuthTokenRequestException ex)
            {
                ViewBag.Errors = string.Format("Couldn't get OAuth tokens. \nError: {0}. Description: {1}",
                                               ex.Details.Error, ex.Details.Description);

                return(View());
            }
            // Bulk service operations can throw AdApiFaultDetail.
            catch (FaultException <Microsoft.BingAds.V11.Bulk.AdApiFaultDetail> ex)
            {
                ViewBag.Errors  = string.Format("Error when calling the Bulk service: ");
                ViewBag.Errors += string.Join("; ",
                                              ex.Detail.Errors.Select(e => string.Format("{0}: {1}", e.Code, ex.Message)));

                return(View());
            }
            // Customer Management service operations can throw AdApiFaultDetail.
            catch (FaultException <Microsoft.BingAds.V11.CustomerManagement.AdApiFaultDetail> ex)
            {
                ViewBag.Errors  = string.Format("Error when calling the Customer Management service: ");
                ViewBag.Errors += string.Join("; ",
                                              ex.Detail.Errors.Select(e => string.Format("{0}: {1}", e.Code, ex.Message)));

                return(View());
            }
            catch (Exception ex)
            {
                ViewBag.Errors = ex.Message;

                return(View());
            }
        }
        private static Authentication AuthenticateWithOAuth()
        {
            var webCodeGrant = new OAuthWebAuthCodeGrant(Settings.Default["ClientId"].ToString(),
                                                         Settings.Default["ClientSecret"].ToString(), new Uri(Settings.Default["OAuthRedirectUri"].ToString()));

            // It is recommended that you specify a non guessable 'state' request parameter to help prevent
            // cross site request forgery (CSRF).
            webCodeGrant.State = ClientState;

            string refreshToken;

            // If you have previously securely stored a refresh token, try to use it.
            if (GetRefreshToken(out refreshToken))
            {
                AuthorizeWithRefreshTokenAsync(webCodeGrant, refreshToken).Wait();
            }
            else
            {
                // You must request user consent at least once through a web browser control.
                // Call the GetAuthorizationEndpoint method of the OAuthDesktopMobileAuthCodeGrant instance that you created above.
                Console.WriteLine(string.Format(
                                      "The Bing Ads user must provide consent for your application to access their Bing Ads accounts.\n" +
                                      "Open a new web browser and navigate to {0}.\n\n" +
                                      "After the user has granted consent in the web browser for the application to access their Bing Ads accounts, " +
                                      "please enter the response URI that includes the authorization 'code' parameter: \n", webCodeGrant.GetAuthorizationEndpoint()));

                // Request access and refresh tokens using the URI that you provided manually during program execution.
                var responseUri = new Uri(Console.ReadLine());

                if (webCodeGrant.State != ClientState)
                {
                    throw new HttpRequestException("The OAuth response state does not match the client request state.");
                }

                webCodeGrant.RequestAccessAndRefreshTokensAsync(responseUri).Wait();
            }

            // It is important to save the most recent refresh token whenever new OAuth tokens are received.
            // You will want to subscribe to the NewOAuthTokensReceived event handler.
            // When calling Bing Ads services with ServiceClient<TService>, BulkServiceManager, or ReportingServiceManager,
            // each instance will refresh your access token automatically if they detect the AuthenticationTokenExpired (109) error code.
            webCodeGrant.NewOAuthTokensReceived +=
                (sender, tokens) => SaveRefreshToken(tokens.NewRefreshToken);

            return(webCodeGrant);
        }