android - single - Autenticar mi "aplicación" a Google Cloud Endpoints no como un "usuario"
identity provider google (3)
Parece que está funcionando como se esperaba. Usted controla qué aplicaciones de cliente pueden llamar a sus métodos de punto final a través de los ID de cliente como ya lo hizo. El parámetro de usuario entra como nulo precisamente porque no está haciendo autenticación de usuario final. El parámetro de usuario representa un usuario real real (cuenta de Google). Por lo tanto, si no necesita métodos autenticados para el usuario final, simplemente no puede definir el parámetro de usuario o ignorar el valor nulo. Usted dijo que su problema es que el parámetro de usuario está establecido como nulo. ¿Qué esperas que sea en este escenario?
Lo que intento hacer es autenticar mi aplicación de Android en Google Cloud Endpoint. Básicamente, los puntos finales solo deberían permitir que mi aplicación de Android acceda a los métodos y nada más.
He hecho estas cosas -
Cree una identificación de cliente usando mi valor SHA1 en Eclipse en Google Cloud Console.
Cree un ID de cliente web en Google Cloud Console para mi proyecto de punto final.
Agregue ambos ID de cliente en el "@Api" mencionado en cada punto final.
Agregue un parámetro de "usuario" adicional en los métodos de punto final.
Regenerar e implementar el backend a la nube.
Pero cuando estoy ejecutando esto, el "usuario" siempre viene como "nulo". Estoy en mi ingenio al intentar encontrar un método de trabajo adecuado para hacer todo esto.
He buscado en muchos foros, pero no hay respuestas adecuadas en ninguna parte.
Aquí hay otra publicación similar Restrinja el acceso a los puntos finales de Google Cloud a la aplicación de Android
Esta es la referencia que estoy usando - https://developers.google.com/appengine/docs/java/endpoints/auth
¿Alguien ha hecho esto antes? Mi objetivo principal es no permitir que las aplicaciones no autenticadas y el mundo exterior accedan a los puntos finales, por razones obvias de seguridad. No quiero utilizar la autenticación basada en el usuario final, ya que quiero mantener mi aplicación muy simple.
Necesitas llamar al autenticador en el cliente, entonces posiblemente la biblioteca que estás utilizando ''inyectará'' la información del usuario.
Esto es lo que funcionó para mí:
Digamos que tienes las claves a continuación:
static final String WEB_CLIENT_ID = "somekeyfor webclientid.apps.googleusercontent.com";
static final Cadena ANDROID_CLIENT_ID = "somekeyfor androidclientid.apps.googleusercontent.com"; static final Cadena ANDROID_AUDIENCE = WEB_CLIENT_ID;
Tu anotación Api debe verse así:
@Api(
name = "yourapiname",
clientIds = {CloudEndpoint.WEB_CLIENT_ID,CloudEndpoint.ANDROID_CLIENT_ID},
audiences = {CloudEndpoint.ANDROID_AUDIENCE},
version = "v1",
namespace = @ApiNamespace(
ownerDomain = "myapp.app.com",
ownerName = "myapp.app.com",
packagePath = ""
)
)
En la anotación a continuación, observe cómo su audiencia es la variable -> ANDROID_AUDIENCE que es igual a WEB_CLIENT_ID.
Ahora, en su aplicación, cuando crea el objeto googleAccountCredential, debe pasar el Id. De cliente web así:
mAccountCredentials = GoogleAccountCredential.usingAudience(getApplicationContext(),"server:client_id:" + "yourwebclientID");
Tenga en cuenta que incluso si esto se hace correctamente, su objeto de usuario en el punto final aún podría salir como nulo si el nombre de cuenta que pasa en mAccountCredentials.setSelectedAccountName ("accontname") no existe en el dispositivo. Por lo tanto, asegúrese de que el nombre de cuenta que pase exista en el dispositivo Android yendo a -> (Configuración / Cuentas)