Obtener token de actualización google api

No puedo obtener mi token de actualización con mi código. Solo puedo obtener mi token de acceso, tipo de token, etc., he seguido algunos tutoriales como poner access_type=offline en mi URL de inicio de sesión:

 echo "Google"; 

y mis campos para obtener el token de acceso:

 $fields=array( 'code'=> urlencode($authcode), 'client_id'=> urlencode($clientid), 'client_secret'=> urlencode($clientsecret), 'redirect_uri'=> urlencode($redirecturi), 'grant_type'=> 'authorization_code', ); 

pero no puedo obtener refresh_token , solo access_token , token_type , id_token y expires_in .

Descubierto al agregar esto a sus parámetros de url

approval_prompt = force

Si puedo ampliar la respuesta del usuario987361 :

Desde la parte de acceso sin conexión de los documentos de OAuth2.0:

Cuando su aplicación recibe un token de actualización, es importante almacenar ese token de actualización para usarlo en el futuro. Si su aplicación pierde el token de actualización, tendrá que volver a pedirle permiso al usuario antes de obtener otro token de actualización. Si necesita volver a solicitar el consentimiento del usuario, incluya el parámetro approval_prompt en la solicitud de código de autorización y establezca el valor en force .

Por lo tanto, cuando ya haya otorgado acceso, las solicitudes subsiguientes de grant_type de authorization_code no devolverán refresh_token , incluso si access_type se configuró en offline en la cadena de consulta de la página de consentimiento.

Como se indica en la cita anterior, para obtener una nueva refresh_token después de recibir una, deberá enviar a su usuario nuevamente a través del aviso, lo que puede hacer configurando approval_prompt para force .

Aclamaciones,

PS: este cambio también se anunció en una publicación de blog .

Es access_type=offline que desea.

Esto devolverá el token de actualización la primera vez que el usuario autorice la aplicación. Las llamadas posteriores no lo obligan a volver a aprobar la aplicación ( approval_prompt=force ).

Consulte más detalles: https://developers.google.com/accounts/docs/OAuth2WebServer#offline

Este es un código completo en PHP usando el SDK oficial de Google

 $client = new Google_Client(); ## some need parameter $client->setApplicationName('your application name'); $client->setClientId('****************'); $client->setClientSecret('************'); $client->setRedirectUri('http://your.website.tld/complete/url2redirect'); $client->setScopes('https://www.googleapis.com/auth/userinfo.email'); ## these two lines is important to get refresh token from google api $client->setAccessType('offline'); $client->setApprovalPrompt('force'); # this line is important when you revoke permission from your app, it will prompt google approval dialogue box forcefully to user to grant offline access 

Hola, seguí los siguientes pasos y pude obtener el token de actualización.

El flujo de autorización tiene dos pasos.

  1. ¿Es necesario obtener el código de autorización utilizando https://accounts.google.com/o/oauth2/auth? URL.

    Para eso se envía una solicitud posterior que proporciona los siguientes parámetros. 'scope=' + SCOPE + '&client_id=' + CLIENTID + '&redirect_uri=' + REDIRECT + '&response_type=' + TYPE + '&access_type=offline' Proporcionando arriba recibirá un código de autorización.

  2. ¿Recuperando AcessToken y RefreshToken usando https://accounts.google.com/o/oauth2/token? URL. Para eso se envía una solicitud posterior que proporciona los siguientes parámetros.

    “código”: código, “client_id”: CID, “client_secret”: CSECRET, “redirect_uri”: REDIRECT, “grant_type”: “authorization_code”,

Por lo tanto, en su primer bash, una vez que autorice los permisos, podrá obtener el token Refresh. Los bashs posteriores no proporcionarán el token de actualización. Si quiere el token nuevamente, revoque el acceso en su aplicación.

Espero que esto ayude a alguien a aplaudir 🙂

OAuth tiene dos escenarios en modo real. El estilo de acceso normal y predeterminado se llama en línea. En algunos casos, su aplicación puede necesitar acceder a una API de Google cuando el usuario no está presente, es escenarios fuera de línea. un token de actualización se obtiene en escenarios fuera de línea durante el primer intercambio de código de autorización.

Así que puedes obtener referidos_consejos en algunos escenarios, no en todos.

puede tener el contenido en https://developers.google.com/identity/protocols/OAuth2WebServer#offline .

Para nuestra aplicación, tuvimos que usar estos dos parámetros access_type=offline&prompt=consent . approval_prompt=force no funcionó para nosotros