0

로컬 사용자 목록이있는 android 앱이 있습니다. 이 앱에는 Firebase에 단일 전용 사용자가 있으며 (다른 사용자는 로컬로 관리됩니다), 실시간 데이터베이스에 액세스하는 데 사용해야합니다. UID는 보안 규칙을 적용하고 특정 데이터 요소에 대한 액세스를 제한하는 데 사용됩니다. 두 가지 옵션이 있다고 생각합니다 : custom token 또는 service account (databaseAuthVariableOverride 포함).Firebase 커스텀 토큰 대 서비스 계정

서비스 계정 접근 방식을 사용하여 얻을 수있는 보안 문제가 궁금합니다. 완전한 액세스 권한을 얻었습니까? 어쩌면 최소한의 행동으로 제한 할 수 있을까요?

사용자 정의 토큰 방식은 토큰 만료에 문제점이있을 수 있습니다. 토큰 유효성을 크게 연장 할 수있는 방법이 있습니까? android에서 맞춤 토큰을 생성하는 가장 좋은 방법은 무엇일까요?

답변

0

서비스 계정을 사용하면 데이터베이스에 설치된 모든 응용 프로그램에 액세스 할 수 있습니다. 즉, 응용 프로그램을 설치하는 모든 사람에게 똑같은 내용이 표시됩니다.

데이터베이스의 다른 노드에 대한 액세스를 다른 사용자에게 맞게 조정할 수 있도록 일반적으로 토큰 방식을 사용합니다. 이것은 일반적으로 예를 들어, 노드에 대한 몇 가지 간단한 규칙을 설정하여 달성된다

// Sample firebase rules 
    { 
     "rules": { 
     "messages": { 
      // Only admin servers with service accounts should r/w here 
      ".read": "auth.uid == 'server-with-svc-acct'", 
      ".write": "auth.uid == 'server-with-svc-acct'", 
      "$user_id": { 
      // Users can only read their own nodes 
      ".read": "auth.uid == $user_id", 
      ".write": "auth.uid == $user_id", 

      } 
     } 
     } 
    } 

당신은 official documentation에서 Google+를 정식하는 방법에 대한 자세한 내용을 확인할 수 있지만, 일반적인 용어로하면 일단 인증, 당신은 얻을 수 있습니다 고유 한 사용자 ID를 사용하여 실시간 데이터베이스의 원하는 노드에 기록하십시오. 규칙이 그 제한되므로 사용자는, 다른 노드에 액세스 할 수 없습니다 : 당신의 서비스 계정 비밀을 유지하는 것이 안전 서버에 대해서는

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){ 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
     } else { 
      // User is signed out 
      Log.d(TAG, "onAuthStateChanged:signed_out"); 
     } 
     // ... 
    } 
}; 
// ... 

를 다음에서 중포 기지 연결을 시작할 수 있습니다 (databaseAuthVariableOverride?을 확인하면 messages 노드의 루트에 사용 된 auth.uid과 일치 함).

firebase.initializeApp({ 
    serviceAccount: "path/to/project-name-secrets.json", 
    databaseURL: "https://project-name.firebaseio.com", 
    databaseAuthVariableOverride: { 
    uid: "server-with-svc-acct" 
    } 
}); 

자세한 내용은 documentation에서도 확인할 수 있습니다.

관련 문제