我一直在尝试在我的应用中实施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();
}
}
});
idToken
长为1232个字符。我有义务发送整个字符串吗?结构如下:{alg,kid}.{iss,name,picture,aud,auth_time,user_id,sub,iat,exp,email,email_verified,firebase{...}}.XXX
。由于我不会在服务器端使用这些字段,因此我会缩减很多字段。// Send token to your backend via HTTPS
会是什么样(一个简单的URL,其中包含String,或者是否有发送JWT的正确方法)?https://www.googleapis.com/oauth2/v1/userinfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg
或https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
?Admin SDK
在所有这方面的作用是什么?我以为我已经结束了,这是我所需要的,直到我偶然发现this other doc并带来了其他问题:
implementation 'com.google.firebase:firebase-admin:6.3.0'
仅需要在服务器端代码中吗?firebase-adminsdk.json
文件插入哪里? 在Firebase Admin SDK中,设置由Google提供的代码。 FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
和FileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");
:我要在其中插入哪个JSON文件? 上面提到的那个! google_services.json
?Database
。使用我自己的数据库(这是GoDaddy上托管的MySQL)是否可行? 是的! 很抱歉,如果有很多问题。我在这里有点新。