programación programacion ernesto desde curso completo cero java android oauth oauth-2.0 google-play-games

java - programacion - ¿Por qué se desaprueba GetServerAuthCodeResult? ¿Cómo puedo hacer algo equivalente en una aplicación instalada?



programacion java desde cero (2)

Siguiendo esta publicación: http://android-developers.blogspot.com/2016/01/play-games-permissions-are-changing-in.html Obtuve un código de autorización de uso único para usar en mi servidor backend de la siguiente manera:

import com.google.android.gms.games.Games; //later Games.GetServerAuthCodeResult result = Games.getGamesServerAuthCode(gameHelper.getApiClient(), server_client_id).await(); if (result.getStatus().isSuccess()) { String authCode = result.getCode(); // Send code to server...

Esto parece funcionar bien, pero presenta una pregunta:

1) getGamesServerAuthCode y GetServerAuthCodeResult están marcados como en desuso. ¿Por qué? ¿Debería estar usando otra cosa en su lugar?

2) ¿Cómo haría algo equivalente en una aplicación Java no instalada con Android? Puedo obtener un token en la aplicación cliente, pero también necesito obtener un código de uso único para pasarlo a mi servidor backend como se indica anteriormente. No puedo encontrar una función equivalente para obtener un código de autenticación de servidor. (utilizando com.google.api.client.extensions.java6.auth.oauth2)

Básicamente estoy tratando de seguir este flujo: https://developers.google.com/games/services/web/serverlogin pero en Java, NO en Javascript. Estoy intentando hacer esto en una aplicación de Android y una aplicación Java de escritorio.


¡Finalmente hay una respuesta apropiada a la parte 1 de esta pregunta! En las notas de la versión de gms 10.2.0 https://developers.google.com/android/guides/releases#february_2017_-_v102 describe el nuevo método para obtener un código de servidor. Un buen ejemplo de cómo hacer esto se proporciona aquí: https://github.com/playgameservices/clientserverskeleton
Terminé actualizando los juegos baseGameUtils de Google para seguir el ejemplo anterior.

Aún no estoy seguro de la forma correcta de hacer esto para la parte 2) de la pregunta, en este momento estoy enviando el token al servidor, que funciona pero probablemente no sea seguro.


1) Sí, en Android use GetServerAuthCodeResult aunque aún esté marcado como obsoleto. Es la forma recomendada por Google y parece que solo se han olvidado de eliminar la anotación de desaprobación cuando se publica al público en general.

2) Para aplicaciones de escritorio, puede seguir las instrucciones aquí: https://developers.google.com/identity/protocols/OAuth2InstalledApp

Básicamente, desde su aplicación, abre el navegador del sistema (se desaconsejan las vistas web integradas) y realiza una solicitud https al punto final https://accounts.google.com/o/oauth2/v2/auth . En la solicitud, debe proporcionar un parámetro URI de redireccionamiento local, es decir, http://127.0.0.1:9004 (debe consultar en su plataforma la IP de bucle de retorno correspondiente e iniciar una escucha HTTP en un puerto disponible al azar). El código de autorización se enviará a su oyente HTTP local cuando el usuario haya dado su consentimiento o un error, como error=access_denied si el usuario rechazó la solicitud. Su aplicación debe estar escuchando en este servidor web local para recuperar la respuesta con el código de autenticación. También tiene la opción de redirigir a un URI del servidor reclamado directamente por su aplicación, consulte los documentos en el enlace anterior. Cuando su aplicación recibe la respuesta de autorización, para una mejor usabilidad, debe responder con una página HTML, indicando al usuario que cierre la pestaña del navegador y regrese a su aplicación. Además, si desea que Games-scope asegúrese de estar usando https://www.googleapis.com/auth/games como alcance en la solicitud, ejemplo a continuación, con saltos de línea y espacios para facilitar la lectura.

https://accounts.google.com/o/oauth2/v2/auth? scope=https://www.googleapis.com/auth/games& redirect_uri=http://127.0.0.1:9004& response_type=code& client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

Tenga en cuenta que creo que tendrá que crear y vincular una aplicación de tipo other , en la aplicación vinculada de Google Play Developer Console, para que funcione la redirección de localhost. Utilice el tipo Web si planea redireccionar directamente al URI del servidor, agregue el URI de su servidor a los URI de Authorized redirect URIs en el Administrador de API en la sección Credentials .

Captura de pantalla del navegador: