Android 关于如何使用的困惑;IdToken“;适当地

Android 关于如何使用的困惑;IdToken“;适当地,android,firebase,oauth-2.0,google-api,firebase-authentication,Android,Firebase,Oauth 2.0,Google Api,Firebase Authentication,我一直在尝试在我的应用程序中实现一个oauth2.0身份验证过程 我们有一个带有RESTAPI的后端服务器,完全用Java编码,并集成了Spring 该应用程序已在Firebase上注册(我可以通过控制台访问),并且我已成功实施Google登录过程和电子邮件/密码(用户将添加到Firebase控制台中显示的我的用户库中) 我这里的问题很可能是我对OAuth进程的理解不够:据我所知,我应该在应用程序中使用FirebaseUser.getIdToken(bool)来获取我发送的JWT(JSON We

我一直在尝试在我的应用程序中实现一个
oauth2.0
身份验证过程

我们有一个带有RESTAPI的后端服务器,完全用Java编码,并集成了Spring

该应用程序已在
Firebase
上注册(我可以通过控制台访问),并且我已成功实施
Google登录
过程和
电子邮件/密码
(用户将添加到Firebase控制台中显示的我的用户库中)

我这里的问题很可能是我对OAuth进程的理解不够:据我所知,我应该在应用程序中使用
FirebaseUser.getIdToken(bool)
来获取我发送的
JWT
(JSON Web令牌)(通过
HTTPPOST
)向后端服务器发送需要身份验证的用户请求(例如,发送服务器应保存在用户数据库中与发送请求的用户关联的UID相关的行中的信息)

我相信这是一个我应该遵循,以实现我的目标。但是,文档中显示的这部分代码片段让我感到困惑:

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();
            }
        }
    });
FirebaseUser mUser=FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(真)
.addOnCompleteListener(新的OnCompleteListener(){
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串idToken=task.getResult().getToken();
//通过HTTPS将令牌发送到后端
// ...
}否则{
//Handle error->task.getException();
}
}
});
  • 我得到的
    idToken
    长度为1232个字符。我有义务把整根绳子都送出去吗?结构如下:
    {alg,kid}.{iss,name,picture,aud,auth\u time,user\u id,sub,iat,exp,email,email\u-verified,firebase{…}.XXX
    。因为我不会在服务器端使用它们,所以有很多字段需要删减
  • 我现在似乎无法正确获取idToken的“XXX”部分。我知道这与数字签名有关,我可能需要一个公钥和一个私钥(还不确定从哪里获得好的)。我该怎么处理呢
  • //通过HTTPS将令牌发送到您的后端可能是什么样子的(一个包含字符串的简单URL,或者是否有适当的方式发送JWT)
  • 对于身份验证过程,服务器是否需要从客户端接收JWT
  • 我是否可以通过JWT发送其他信息(例如验证后身份验证应该做什么)?如果不是,我是否应该假设这是在服务器回复客户端它现在正在等待来自现在已验证的用户的请求之后完成的
  • 我见过有人调用一些URL来验证他们的令牌,但我不确定应该使用哪个URL,应该传入哪个令牌,以及我应该期望得到什么结果。也许
    https://www.googleapis.com/oauth2/v1/userinfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg
    https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
  • Admin SDK
    在所有这些方面的作用是什么
  • 我以为我结束了,这就是我所需要的一切,直到我无意中发现了其他问题:

  • implementation'com.google.firebase:firebase admin:6.3.0'
    是否只需要在服务器端代码中<显然是的
  • 我应该将我的
    firebase adminsdk.json
    文件插入到哪里在Firebase Admin SDK中设置由Google提供的代码。
  • FileInputStream servicecomport=newfileinputstream(“path/to/serviceAccountKey.json”)
    FileInputStream refreshttoken=newfileinputstream(“path/to/refreshttoken.json”):我应该插入哪个JSON文件刚才提到的那个
  • 我的服务器是否需要集成
    google_services.json
  • 这似乎主要是关于使用Firebase的
    数据库。是否可以使用我自己的数据库(它是一个托管在GoDaddy上的MySQL)是的
  • 如果有很多问题,我很抱歉。我对这里有点陌生