Confusión sobre cómo usar "IdToken" correctamente

He estado tratando de implementar unaOAuth 2.0 proceso de autenticación en mi aplicación.

Tenemos un servidor back-end con API REST, totalmente codificado en Java y con Spring integrado.

La aplicación está registrada enFirebase (Puedo acceder a través de la consola) y he implementado con éxito laGoogle SignIn proceso y elEmail/Password (los usuarios se agregan a mi base de usuarios como se muestra en la consola de Firebase).

Mi problema aquí es probablemente mi pobre comprensión del proceso de OAuth: como lo entiendo, se supone que debo usarFirebaseUser.getIdToken(bool) desde la aplicación para obtener elJWT (JSON Web Token) que envío (a través deHTTP Post) al servidor de fondo para una solicitud del usuario que requeriría autenticación (algo como enviar una información que nuestro servidor debería guardar en nuestra Base de datos de usuarios en la fila relacionada con el UID asociado con el usuario que envía la solicitud).

Yo creoeste documento es el que se supone que debo seguir para lograr mi objetivo. Sin embargo, esta parte de los fragmentos de código presentados en el documento me deja confundido:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });
LosidToken Estoy obteniendo 1232 caracteres de largo. ¿Estoy obligado a enviar toda la cadena? La estructura se ve así:{alg,kid}.{iss,name,picture,aud,auth_time,user_id,sub,iat,exp,email,email_verified,firebase{...}}.XXX. Hay bastantes campos que recortaría ya que no los usaré en el lado del servidor. Parece que no puedo obtener la parte "XXX" de mi idToken por ahora. Sé que está relacionado con una firma digital y que probablemente necesito una clave pública y una clave privada (aún no estoy seguro de dónde obtener las buenas). ¿Cómo trato con eso?Qué podría ser el// Send token to your backend via HTTPS look (una URL simple que contiene la cadena, ¿o hay una manera adecuada de enviar el JWT)?Es el JWT todo lo que el servidor necesita recibir del cliente para el proceso de autenticación? ¿Puedo enviar información adicional con el JWT (como lo que debe hacer la autenticación una vez que se verifica)? Si no, ¿debo suponer que eso se hace después de que el servidor responde al cliente que ahora está esperando una solicitud del usuario ahora autenticado? He visto personas que llaman a alguna URL para verificar su token, pero no estoy seguro de qué URL debo usar, qué token debo pasar y qué debo esperar como resultado. Tal vezhttps://www.googleapis.com/oauth2/v1/userinfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg ohttps://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123? ¿Cuál es el papel de laAdmin SDK en todo eso @

Pensé que había terminado y que esto era todo lo que necesitaba hasta que me topé coneste otro documento que trae otras preguntas:

Haceimplementation 'com.google.firebase:firebase-admin:6.3.0' ¿solo necesita estar en el código del lado del servidor? ¡Aparentemente sí ¿Dónde conecto mifirebase-adminsdk.json archivo en todo eso? @En el código de configuración de Firebase Admin SDK proporcionado por Google.FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json"); yFileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");: ¿qué archivo JSON conecto allí? @ ¡El mencionado justo arriba! ¿Mi servidor necesita tener elgoogle_services.json integrado? Esto parece estar hablando principalmente de usar Firebase'sDatabase. ¿Es factible usar mi propio DB (es un MySQL alojado en GoDaddy)? @¡Sí

Lo siento mucho si son muchas preguntas. Soy un poco nuevo por aquí.

Respuestas a la pregunta(0)

Su respuesta a la pregunta