簡體   English   中英

使用Firebase身份驗證對Android進行身份驗證,並發送令牌以驗證后端Django

[英]Authenticating Android with firebase Authentication and send token to verify to backend Django

我在這里要解決的問題很普遍,我關注的一部分是我要強調的問題:

我的Android應用程序使用Firebase身份驗證(創建或確認存在)對用戶進行身份驗證,然后在我的Django后端上調用各種AP​​I。 要調用API,我需要在每個請求中發送一個令牌,以防止未經授權的請求。

我最初計划使用Django身份驗證,但是由於我使用的是Firebase Auth,因此我在考慮以下方法:

用戶登錄或登錄Android設備時。 Android將生成自定義令牌(來自Firebase),將其存儲在手機上,然后將其通過每個API發送到后端。 在后端,我將使用firebase API(第一次)從firebase獲取用戶,並將令牌存儲在我的用戶模型中。 如果在我的數據庫中找不到令牌,並且在Firebase中不可用,那么我將返回未經授權的用戶。 對於后續請求,我使用本地用戶表驗證令牌。

請告知這種方法在這種情況下是否最佳。

謝謝

我無法評論您的方法。 但是,即使我也想知道最好的方法。 這是我使用此頁中提供的信息來執行此操作的方式verify-id-tokens

  1. 使用Firebase SDK的用戶登錄。
  2. 我將令牌作為標頭附加到改造的HTTP調用攔截器中。 現在,id令牌僅在15-20分鍾內有效,因此您無法保存它們。 只需使用以下代碼在攔截http調用中添加攔截器

     public class FirebaseUserIdTokenInterceptor implements Interceptor { // Custom header for passing ID token in request. private static final String X_FIREBASE_ID_TOKEN = "Authorization"; @Override public Response intercept(@NonNull Chain chain) throws IOException { Request request = chain.request(); try { FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user == null) { throw new Exception("User is not logged in."); } else { Task<GetTokenResult> task = user.getIdToken(true); GetTokenResult tokenResult = Tasks.await(task); String idToken = tokenResult.getToken(); if (idToken == null) { throw new Exception("idToken is null"); } else { Request modifiedRequest = request.newBuilder() .addHeader(X_FIREBASE_ID_TOKEN, "Bearer ".concat(idToken)) .build(); return chain.proceed(modifiedRequest); } } } catch (Exception e) { throw new IOException(e.getMessage()); } } 

    }

  3. 我的節點服務器驗證id令牌,如果id令牌有效,則發送響應,否則返回錯誤消息。

檢查頁面上的警告:

Firebase Admin SDK中包含的ID令牌驗證方法用於驗證來自客戶端SDK的ID令牌,而不是您使用Admin SDK創建的自定義令牌。

希望這可以幫助!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM