gpt4 book ai didi

google-app-engine - 如何使用 Firebase token 验证来保护我的 Google Cloud Endpoints API?

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:12 24 4
gpt4 key购买 nike

我的设置:

  • 托管在 Google App Engine 上的 Java 后端包含使用 Google Cloud Endpoints 创建的 API
  • 包含为上述端点生成的客户端库的移动客户端应用程序。还与 Firebase 集成以进行身份​​验证和数据库。

我的意图是移动客户端应用程序的用户将能够使用 Firebase 身份验证登录到移动应用程序,然后连接到任何后端 API,后者将进行一些处理,然后读取或写入数据到/从 Firebase 数据库。

为了保护服务器上的 API,我想我必须使用 Firebase Server SDK 的内置 verifyIdToken() 方法(请参阅 Firebase 上的 Verifying ID Tokens)来解码从客户端应用程序。由于 verifyIdToken() 异步运行,我如何将它与 GAE 中的 API 方法集成?到目前为止,我有类似于以下内容的内容:

@ApiMethod(name = "processAndSaveToDB", httpMethod = "post")
public Response processAndSaveToDB(@Named("token") String token) {

Response response = new Response();

// Check if the user is authenticated first
FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();

// do bulk of processAndSaveToDB() method

})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {

// throw unauthorized exception

});

return response;
}

最佳答案

由于此身份验证任务在任务队列中异步运行,您可以等到该任务结束并以同步方式继续,您可以选择添加监听器 onSuccess、onFailure 和 onComplete。

Task<FirebaseToken> authTask = FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Object tr) {//do smtg }
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception excptn) {//do smtg }
}).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Task task) {//do smtg }
});
try {
Tasks.await(authTask);
} catch(ExecutionException | InterruptedException e ){
//handle error
}
FirebaseToken decodedToken = authTask.getResult();

关于google-app-engine - 如何使用 Firebase token 验证来保护我的 Google Cloud Endpoints API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com