混淆如何正确使用“ IdToken”

时间:2018-07-19 02:41:35

标签: android firebase oauth-2.0 google-api firebase-authentication

我一直在尝试在我的应用中实施OAuth 2.0身份验证过程。

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

该应用已在Firebase上注册(我可以通过控制台访问它),并且我已经成功实现了Google SignIn流程和Email/Password(如所示,用户已添加到我的用户库中)在Firebase控制台中)。

我的问题很可能是我对OAuth流程的理解不充分:据我了解,我应该在应用程序内使用FirebaseUser.getIdToken(bool)来获取JWT(JSON Web令牌)我通过HTTP Post发送到后端服务器以进行需要身份验证的用户请求(例如发送信息,该信息应由我们的服务器保存在与以下UID相关的行中的用户数据库中)发送请求的用户)。

我相信this doc是我应该遵循的目标。但是,文档中介绍的这部分代码片段使我感到困惑:

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();
            }
        }
    });
  1. 我得到的idToken长为1232个字符。我有义务发送整个字符串吗?结构如下:{alg,kid}.{iss,name,picture,aud,auth_time,user_id,sub,iat,exp,email,email_verified,firebase{...}}.XXX。由于我不会在服务器端使用这些字段,因此我会缩减很多字段。
  2. 我似乎暂时无法获得idToken的“ XXX”部分。我知道它与数字签名有关,我可能需要一个公钥和一个私钥(不太确定从何处获得好的密钥)。我该如何处理?
  3. // Send token to your backend via HTTPS会是什么样(一个简单的URL,其中包含String,或者是否有发送JWT的正确方法)?
  4. 服务器身份验证过程中,服务器需要从客户端接收JWT吗?
  5. 我可以通过JWT发送其他信息吗(例如,验证通过身份验证后应该执行的操作)?如果不是,我是否应该假定服务器在回复客户端后正在等待来自经过身份验证的用户的请求后完成此操作?
  6. 我见过人们打电话给一些URL来验证他们的令牌,但是我不确定应该使用哪个URL,应该传递哪个令牌,以及结果是什么。也许是https://www.googleapis.com/oauth2/v1/userinfo?access_token=1/fFBGRNJru1FQd44AzqT3Zghttps://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
  7. Admin SDK在所有这方面的作用是什么?

我以为我已经结束了,这是我所需要的,直到我偶然发现this other doc并带来了其他问题:

  1. implementation 'com.google.firebase:firebase-admin:6.3.0'仅需要在服务器端代码中吗? 显然是!
  2. 我将firebase-adminsdk.json文件插入哪里? 在Firebase Admin SDK中,设置由Google提供的代码。
  3. FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");FileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");:我要在其中插入哪个JSON文件? 上面提到的那个!
  4. 我的服务器是否需要集成google_services.json
  5. 这似乎主要是在谈论使用Firebase的Database。使用我自己的数据库(这是GoDaddy上托管的MySQL)是否可行? 是的!

很抱歉,如果有很多问题。我在这里有点新。

0 个答案:

没有答案