google-calendar - create - google calendar api key
Obtener token de actualizaciĆ³n google api (7)
Descubierto al agregar esto a sus parámetros de url
approval_prompt = force
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 "<a href=''https://accounts.google.com/o/oauth2/auth?"
. "access_type=offline&client_id=123345555.apps.googleusercontent.com& "
. "scope=https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/plus.me&response_type=code& "
. "redirect_uri=http://www.sample.com/sample.php&state=/profile''>Google</a>";
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 .
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.
¿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.¿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 intento, una vez que autorice los permisos, podrá obtener el token Refresh. Los intentos 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 developers.google.com/identity/protocols/… .
Para nuestra aplicación, tuvimos que usar estos dos parámetros access_type=offline&prompt=consent
. approval_prompt=force
no funcionó para nosotros
Si puedo ampliar la respuesta del user987361 :
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 enforce
.
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 .