I'm having this same issue. I don't have the  OAuth2ClientId and 
OAuth2ClientSecret defined in the config and I get the following error over 
and over until I stop the console app:

Failed to get access token for service account.
{
  "error" : "access_denied"
}

I'm sure this is just me not configuring the service account correctly or 
something, but I can't figure out what I might have done wrong. Any 
suggestions?

On Thursday, January 10, 2013 4:15:15 AM UTC-5, Danial Klimkin wrote:
>
> Hello,
>
>
> The error you are receiving is not an AdWords API error but OAuth2.0 error.
>
> First of all, you don't want to provide OAuth2ClientId and 
> OAuth2ClientSecret for JWT auth, try removing it. If you still get the same 
> error, send me a screenshot of the Console with this project / key over 
> *email* (not to the group).
>
>
> -Danial, AdWords API Team.
>
>
>
> On Saturday, January 5, 2013 4:56:38 AM UTC+4, [email protected] wrote:
>>
>> I work for a company that uses Google AdWords, and we have a .NET 
>> application (written in C#) that makes use of the Google AdWords API. We 
>> are using the latest version (201209) of the Google API client assemblies 
>> for .NET. The application currently uses the ClientLogin protocol for 
>> authenticating, but we are trying to migrate to OAuth 2.0.
>>
>> I am fairly confident that I have gone through all of the required steps 
>> to be able to successfully negotiate a request for an authentication token. 
>> I am using the sample code solution that comes with the Google API client 
>> assemblies in order to test this, using the “Service Account” workflow. So 
>> far I have not succeeded. Within the code we call the 
>> GenerateAccessTokenForServiceAccount() method of the OAuth2Provider object 
>> that is the OAuthProvider property of an AdWordsUser object. The result is 
>> that a Google.Api.Ads.Common.Lib.AdsOAuthException is thrown with the 
>> message “Failed to get access to token for service account” that also 
>> includes a JSON object with one key-value pair:
>>
>> “error” : “access_denied”
>>
>> When examining the traffic using Fiddler2, I see what looks like a 
>> properly-formed request going out, according to the relevant documentation (
>> *https://developers.google.com/accounts/docs/OAuth2ServiceAccount*<https://developers.google.com/accounts/docs/OAuth2ServiceAccount>)
>>  
>> …
>>
>> POST https://accounts.google.com/o/oauth2/token HTTP/1.1
>>
>> Content-Type: application/x-www-form-urlencoded
>>
>> Host: accounts.google.com
>>
>> Content-Length: 583
>>
>> Expect: 100-continue
>>
>> Connection: Keep-Alive
>>
>>  
>>
>>
>> grant_type=urn%3aietf%3aparams%3aoauth%3agrant-type%3ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzNDgzMjEzMjIyNDlAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCAic2NvcGUiOiJodHRwczovL2Fkd29yZHMuZ29vZ2xlLmNvbS9hcGkvYWR3b3Jkcy8iLCAiYXVkIjoiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL28vb2F1dGgyL3Rva2VuIiwgImV4cCI6MTM1NzMzMTIxNSwgImlhdCI6MTM1NzMyNzYxNSwgInBybiI6IkluZm9zcGFjZUNvcnBAZ21haWwuY29tIn0.BnD3-oPozaUInI9LexIF_wqNnIOLeGLBfv1oJOjzpHjc9q5p_-Q7A7i_V3QkqCKgV2EmWT3wU8BNUKj7YrpKThWgzKNT661uA4HiF2ZPQNYduKxouJrB7OON9BXoWBdgkSjyWb5frEzTmzklM476SEQAJvWP2djxBSGaha3Qwww
>>
>> … and a HTTP 400 response coming back that contains no meaningful header 
>> information, and the aforementioned JSON object in the body.
>>
>> HTTP/1.1 400 Bad Request
>>
>> Cache-Control: no-cache, no-store, max-age=0, must-revalidate
>>
>> Pragma: no-cache
>>
>> Expires: Fri, 01 Jan 1990 00:00:00 GMT
>>
>> Date: Fri, 04 Jan 2013 19:26:54 GMT
>>
>> Content-Type: application/json
>>
>> X-Content-Type-Options: nosniff
>>
>> X-Frame-Options: SAMEORIGIN
>>
>> X-XSS-Protection: 1; mode=block
>>
>> Server: GSE
>>
>> Content-Length: 31
>>
>>  
>>
>> {
>>
>>   "error" : "access_denied"
>>
>> }
>>
>> I am not sure what that response means. From what I’ve seen of other 
>> failed attempts described here and on other forums, I am assuming that the 
>> request is correctly formed and would normally succeed, but there is 
>> something in how the client access credentials are set up on the API 
>> console that is wrong enough to prevent an authentication token from being 
>> granted.
>>
>> What follows is a step-by-step description of every step taken, from 
>> requesting the developer token to “access_denied”. It is my expectation 
>> that others who have gone before and succeeded will be able to identify 
>> whatever missteps I have made and offer sufficient information to get me 
>> past “access_denied”. 
>>
>> 1.       Using a Google AdWords MCC account, requested a developer token 
>> at the AdWords API Center. This request has been approved, and a developer 
>> token supplied.
>>
>> 2.       For the same MCC account, logged in to the Google API Console (*
>> https://code.google.com/apis/console*<https://code.google.com/apis/console>) 
>> and created a project (“API Project”). We did not register for a Project ID.
>>
>> 3.       On the Services tab, we did not set up or activate any 
>> services. AdWords is not listed. According to the AdWords API documentation 
>> (*https://developers.google.com/adwords/api/docs/authentication*<https://developers.google.com/adwords/api/docs/authentication>),
>>  
>> this step can be skipped.
>>
>> 4.       On the “API Access” tab of this project, we entered branding 
>> information and set up a Client ID for a Service account. This generated a 
>> “client ID” for a service account which had
>>
>> a.       a Client ID (012345678901.apps.googleusercontent.com)
>>
>> b.      an e-mail address (*[email protected]*)
>>
>> c.       a public key fingerprint (forty hexadecimal digits)
>>
>> d.      a private/public key (.P12 file), which we downloaded
>>
>> 5.       I unzipped the code samples from the Google API client archive 
>> (awapi_dotnet_lib_15.2.0.zip) and opened the solution in Visual Studio 
>> 2012. I set the ConsoleTest project as the start project.
>>
>> 6.       I uncommented and edited the relevant key-value pairs in the 
>> configuration file to set up the sample application to use the access 
>> credentials we had generated earlier.
>>
>>   <AdWordsApi>
>>
>>     <!-- Fill the header values. -->
>>
>>     <add key="UserAgent" value="Our_Application_Name"/>
>>
>>     <add key="DeveloperToken" value="hyP0tH3t1c47D3v370p3Rt0k3N"/>
>>
>>     <add key="ClientCustomerId" value="123-456-7890"/>
>>
>>     <!-- To use OAuth2 as authentication mechanism, uncomment the 
>> following section and comment the AuthToken and OAuth2 sections. -->
>>
>>     <add key="AuthorizationMethod" value="OAuth2" />
>>
>>     <!-- Use the following keys if you want to use client id and client 
>> secret.-->
>>
>>     <add key="OAuth2ClientId" value="
>> 012345678901.apps.googleusercontent.com" />
>>
>>     <add key="OAuth2ClientSecret" value="
>> 0123456789abcdef0123456789abcdef01234567" />
>>
>>     <!-- Use the following keys if you want to use a service account. -->
>>
>>     <add key="OAuth2ServiceAccountEmail"
>>
>>         value="[email protected]" />
>>
>>     <add key="OAuth2PrnEmail" value="[email protected]"/>
>>
>>     <add key="OAuth2JwtCertificatePath"
>>
>>         value="
>> C:\local_file_path\0123456789abcdef0123456789abcdef01234567-privatekey.p12
>> " />
>>
>>     <add key="OAuth2JwtCertificatePassword" value="super_secret_password"/>
>>
>>   </AdWordsApi>
>>
>>  
>>
>> 7.       In all cases, I’ve provided sample values rather than actual 
>> values. The ClientCustomerId value is actually the Customer ID of our 
>> Adwords MCC account. The OAuth2PrnEmail is the e-mail address of that 
>> account.
>>
>> 8.       Even if the scope key-value pair isn’t set in the configuration 
>> file, the scope property in the AdWordsUser’s configuration does get set to 
>> the correct value for AdWords read/write access (
>> https://adwords.google.com/api/adwords/) before an authentication token 
>> is requested. This is done by the call to AdWordsService.GetOAuthScope() in 
>> the first line of the method below.
>>
>> 9.       In the sample console application from Google, the exception is 
>> thrown in the DoAuth2AuthorizationForServiceAccounts() method of the 
>> Program class in the code file Program.cs . The highlighted line is where 
>> the exception is thrown.
>>
>> <span style="background: white; co...
>> Show 
>> original<https://groups.google.com/group/adwords-api/msg/da2a4cb3bc0136e3?dmode=source&output=gplain&noredirect>
>>
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://adwordsapi.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en



Reply via email to