Hello Jean,

>From your narrated use case, I agree that what you've done is probably the 
best right now.
Thanks for your time describing your use case so it can benefit other 
people too.

Best,
Thanet, AdWords API Team

On Saturday, February 3, 2018 at 5:48:06 AM UTC+9, Jean-Fabrice Rabaute 
wrote:
>
> From what I understand this wouldn't work.
>
> I see the following problem with getOrFetchAccessToken in a distributed 
> environment:
>
> Let's say I have two servers with the php code answering requests from 
> clients, server A and server B.
>
> Those two servers can receive a request at the same time. As they are 
> isolated if getOrFetchAccessToken needs to refresh the token, each server 
> will refresh the token and get an access_token.
> This should not happen and the "refresh token" task should be synced (with 
> a distributed lock system like redis/zk/etcd) between servers so only one 
> is actually refreshing the token, updating the db or cache and the other 
> ones are getting the new value from the updated cache.
> This is all app dependent (well, more client infra-dependent stuff) so the 
> googleads-php-lib cannot/shouldn't deal with this and it should just 
> provide the necessary hooks so the app can take care of this.
> This is what I'm doing with the custom FetchAuthTokenInterface 
> implementation I have.
>
> Note about "shouldFetchAccessToken". Calling "shouldFetchAccessToken" does 
> not help even within the same request.
> I can call "shouldFetchAccessToken" and it will return false and the next 
> call will return "true".
> It means that when calling getOrFetchAccessToken I don't know if the value 
> returned is the "cached" one (whatever that means as cache should be done 
> by the app anyways) or a refreshed one, so I wouldn't know when to save it 
> (well, I could compare with the one I had previously that would work). But 
> then, getOrFetchAccessToken has the problem described initially.
>
> I hope it makes sense.
>
> Thanks.
>
> Le vendredi 2 février 2018 10:06:33 UTC-8, Thanet Knack Praneenararat 
> (AdWords API Team) a écrit :
>>
>> Hello,
>>
>> Looking into this again, isn't the getOrFetchAccessToken 
>> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fgoogleads%2Fgoogleads-php-lib%2Fblob%2F4308d6b03f7ded643fe78b0f2ae0dfa416a62f3e%2Fsrc%2FGoogle%2FAdsApi%2FCommon%2FUtil%2FOAuth2TokenRefresher.php%23L58&sa=D&sntz=1&usg=AFQjCNFAao3Ud-4BIWdqSIZl8hebE8X7mA>
>>  
>> method in OAuth2TokenRefresher similar to what you need?
>> It can fetch a new access token when needed but will just return the 
>> existing one if it's not expired yet.
>>
>> Best,
>> Thanet, AdWords API Team
>>
>> On Thursday, February 1, 2018 at 9:05:45 PM UTC-8, Jean-Fabrice Rabaute 
>> wrote:
>>>
>>> Hi,
>>>
>>> Sorry for the delay.
>>>
>>> I solved my problem by implementing "FetchAuthTokenInterface" interface 
>>> and passing my implementation to 
>>> "AdWordsSessionBuilder::withOAuth2Credential".
>>> The token refresh is now handled by my object and I can synchronize and 
>>> use my custom caching as well the way I want.
>>>
>>> I don't know if this is the correct way to do it or if there is a more 
>>> "official" way to do so.
>>>
>>> Thanks.
>>>
>>> Le mardi 9 janvier 2018 07:53:29 UTC-8, Thanet Knack Praneenararat 
>>> (AdWords API Team) a écrit :
>>>>
>>>> Hello Jean,
>>>>
>>>> Nice to meet you. I'm an owner of the googleads-php-lib.
>>>> I'm still following up all your conversation with my colleagues but 
>>>> from what you said in this thread,
>>>>
>>>> The google/google-auth-library-php (which is used by the adwords 
>>>>> library) seem to have the same problem (The app is unable to 
>>>>> get/cache/manage the access_token in an easy way).
>>>>
>>>>
>>>> Have you confirmed with the owner of that library already?
>>>> And as you clearly see through this, as the *googleads-php-lib* 
>>>> depends on the *google-auth-library-php* library, if that library 
>>>> really doesn't support what you want, I'm afraid our library doesn't 
>>>> support it as well.
>>>>
>>>> I'll come back when I finish following up all the conversations.
>>>>
>>>> Best,
>>>> Thanet, AdWords API Team
>>>>
>>>> On Monday, January 8, 2018 at 3:44:44 AM UTC+9, Jean-Fabrice Rabaute 
>>>> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I'm working on migrating from the old api to the new one and I don't 
>>>>> understand how to reuse the "access_token".
>>>>>
>>>>> When using OAuth2TokenBuilder and AdWordsSessionBuilder, I can set the 
>>>>> "refresh_token" but not the "access_token".
>>>>> If I understand correctly, setting only the refresh_token will force 
>>>>> to get a new access_token everytime I create a new instance of 
>>>>> OAuth2TokenBuilder (which is instantiating a UserRefreshCredentials 
>>>>> object 
>>>>> when the ->build() method is called in my case).
>>>>> This probably works (not sure there might be race condition with 
>>>>> multiple requests in // and then one access_token might be invalid), but 
>>>>> this means that an access_token will be fetched everytime, so two http 
>>>>> requests instead of one.
>>>>> When I have an access_token which is valid for 3600 seconds, I'd like 
>>>>> to be able to reuse it for the valid period, but I can't as there is no 
>>>>> method in OAuth2TokenBuilder nor UserRefreshCredentials to set the 
>>>>> "access_token" when I instantiate my objects on new client http requests.
>>>>>
>>>>> In your response, you say "The first section builds OAuth2 access 
>>>>> token fetchers, which will get access tokens as and when required". But 
>>>>> how 
>>>>> can this happen if the access_token is not provided? As it is not 
>>>>> provided, 
>>>>> a new http request needs to be done to get one before doing the adwords 
>>>>> api 
>>>>> request, right?
>>>>>
>>>>> In the old API, passing the "refresh_token" AND "access_token" was 
>>>>> done when instantiating the AdwordsUser object (here: 
>>>>> https://github.com/googleads/googleads-php-lib/blob/deprecated/src/Google/Api/Ads/AdWords/Lib/AdWordsUser.php#L92
>>>>>  
>>>>> ). It was then possible to reuse an existing and still active 
>>>>> "access_token".
>>>>> Now, I really can't see how to reuse an existing "access_token" with 
>>>>> the new api, only the "refresh_token".
>>>>>
>>>>> Am I missing something?
>>>>>
>>>>> Thank you for any help/feedback.
>>>>>
>>>>> PS: My next problem is to detect that those object are effectively 
>>>>> refreshing the access_token because I'd like to update/save/cache the new 
>>>>> one to be able to reuse it again for the active time period (usually one 
>>>>> hour). That will probably be my next question. The new api seem very 
>>>>> weird 
>>>>> in this regard. The google/google-auth-library-php (which is used by the 
>>>>> adwords library) seem to have the same problem (The app is unable to 
>>>>> get/cache/manage the access_token in an easy way).
>>>>>
>>>>> Le lundi 28 août 2017 09:31:27 UTC-7, Shwetha Vastrad (AdWords API 
>>>>> Team) a écrit :
>>>>>>
>>>>>> Hi Tim, 
>>>>>>
>>>>>> You need to use OAuth2TokenBuilder 
>>>>>> <https://github.com/googleads/googleads-php-lib/blob/master/src/Google/AdsApi/Common/OAuth2TokenBuilder.php#L67>
>>>>>>  
>>>>>> and AdWordsSessionBuilder 
>>>>>> <https://github.com/googleads/googleads-php-lib/blob/master/src/Google/AdsApi/AdWords/AdWordsSessionBuilder.php#L104>
>>>>>>  
>>>>>> to pass the values programmatically. 
>>>>>>
>>>>>>     $oAuth2Credential = (new OAuth2TokenBuilder())
>>>>>>       ->withClientId("OAUTH_2_CLIENT_ID")
>>>>>>       ->withClientSecret("OAUTH_2_CLIENT_SECRET")
>>>>>>       ->withRefreshToken("REFRESH_TOKEN")
>>>>>>       ->build();
>>>>>>
>>>>>>     // Construct an API session configured from the OAuth2 
>>>>>> credentials above.
>>>>>>     $session = (new AdWordsSessionBuilder())
>>>>>>         ->withDeveloperToken("DEVELOPER_TOKEN")
>>>>>>         ->withOAuth2Credential($oAuth2Credential)
>>>>>>         ->withClientCustomerId("CLIENT_CUSTOMER_ID")
>>>>>>         ->build();
>>>>>>
>>>>>>
>>>>>> The first section builds OAuth2 access token fetchers, which will get 
>>>>>> access tokens as and when required. You need to use the oAuth2Credential 
>>>>>> object when you build a AdsSession in the PHP client library. I hope 
>>>>>> this 
>>>>>> helps. If you have any further questions, I would suggest that you post 
>>>>>> on 
>>>>>> the library's issue tracker 
>>>>>> <https://github.com/googleads/googleads-php-lib/issues> so the 
>>>>>> library owners can help you out. 
>>>>>>
>>>>>> Regards,
>>>>>> Shwetha, AdWords API Team.
>>>>>>
>>>>>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/b0e601af-13fb-4d85-9d77-bdf6cd7e294f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
  • Re: ... Jean-Fabrice Rabaute
    • ... Jean-Fabrice Rabaute
      • ... 'Vincent Racaza (AdWords API Team)' via AdWords API Forum
        • ... Jean-Fabrice Rabaute
          • ... 'Josh Radcliff (AdWords API Team)' via AdWords API Forum
    • ... 'Thanet Knack Praneenararat (AdWords API Team)' via AdWords API Forum
      • ... Jean-Fabrice Rabaute
        • ... 'Thanet Knack Praneenararat (AdWords API Team)' via AdWords API Forum
          • ... Jean-Fabrice Rabaute
            • ... 'Thanet Knack Praneenararat (AdWords API Team)' via AdWords API Forum

Reply via email to