studio signin googlesigninoptions google example code android google-app-engine authentication

googlesigninoptions - google signin api android



App de Android AppEngine Endpoints Auth y InApp Billing (1)

Me he encontrado con un problema difícil.

Estoy usando los puntos finales de Appengine para implementar mi API del lado del servidor. Esta API devuelve algunos datos a mis usuarios. Aplicación compatible en la compra de productos de aplicaciones. Mi idea es simple: tan pronto como el usuario compre una determinada API de producto, devolverá datos adicionales. El enfoque directo es pasar una bandera como parámetro a la API. Pero quiero hacerlo más seguro habilitando la autenticación OAuth en mis puntos finales. Entonces, tan pronto como el usuario compra algo, se verifica y se recuerda en un servidor. Por lo tanto, mi punto final de API siempre sabrá qué datos devolver a un usuario en particular.

El problema sin embargo es el siguiente. No quiero forzar a los usuarios a autenticarse a menos que quieran hacer una compra. Pero luego existe la situación de que los usuarios pueden usar otro dispositivo y no iniciar sesión con su cuenta de Google a través de mi aplicación. De esta manera, mi API solo devolverá datos gratuitos, pero el usuario ha pagado los productos comprados. Puedo consultar los productos comprados a través de los servicios de juego, pero aún necesito autenticar en mi servidor o pasar una bandera para obtener datos completos.

¿Cómo se hacen estas cosas generalmente? ¿Puedo usar silenciosamente la primera cuenta de Google de los usuarios (que se garantiza que afaik está garantizada para ser utilizada en Play Store) para la autenticación en mi servidor o está mal?

Gracias.


Debes usar OAuth 2.0 para lo que mencionaste.

Puede utilizar la primera cuenta de Google que permita la autenticación en su servidor. OAuth 2.0 es una gran herramienta que simplifica y brinda a los desarrolladores una manera fácil de permitir que los usuarios accedan a su aplicación, ya sea un juego o una platform comercial. El objeto OAuthHmacSigner administrará la autenticación por usted a medida que se inicializó:

signer = new OAuthHmacSigner(); signer.clientSharedSecret = Constants.CONSUMER_SECRET;

Luego, la actividad de Android usa el siguiente código para iniciar el flujo de OAuth :

launchOauth.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent().setClass(v.getContext(), PrepareRequestTokenActivity.class)); } });

Para implementarlo para su aplicación, puede integrar OAuth 2.0 Google OpenID usando Java, pero también puede elegir usar Python o Ruby en su lugar. Proporciona varias herramientas para aumentar la seguridad, lo que también facilita la construcción de un token de estado anti-falsificación:

String state = new BigInteger(130, new SecureRandom()).toString(32); request.session().attribute("state", state); return new Scanner(new File("index.html"), "UTF-8") .useDelimiter("//A").next() .replaceAll("[{]{2}//s*CLIENT_ID//s*[}]{2}", CLIENT_ID) .replaceAll("[{]{2}//s*STATE//s*[}]{2}", state) .replaceAll("[{]{2}//s*APPLICATION_NAME//s*[}]{2}", APPLICATION_NAME);

Para obtener un token de acceso OAuth 2.0, simplemente debe llamar:

AccountManager.getAuthToken()

Que solicita un token utilizando un authTokenType de oauth2. Luego, como de costumbre, puede integrarlo a su back-end alojado en su servidor.