Hi there, I am having some issues using the firebase_admin python client with a credential object from outside the SDK.
In my use case, I want to initialize the firebase_admin SDK using a Service Account impersonation credential to list users within the firebase environment.
To do this I tried the following:
import google.oauth2.credentials
import google.auth.impersonated_credentials
source_credentials = google.oauth2.credentials.Credentials(token=id_token)
credentials = google.auth.impersonated_credentials.Credentials(
source_credentials=source_credentials,
target_principal=my_service_account_email,
target_scopes=target_scopes,
lifetime=500
)
app_options = {'projectId': project_id}
firebase_app = firebase_admin.initialize_app(
credential=firebase_credential, options=app_options)
When running initialize_app it returns an exception - Illegal Firebase credential provided. App must be initialized with a valid credential instance.
Looking into the firebase-admin-python source code I was able to find the source of the problem. In firebase_admin/__init__.py line 209 the code checks whether the supplied credentials object is an instance of firebase_admin.credentials.Base. If not, then the SDK returns the exception.
I don't understand why this is the case. Why does firebase-admin-python have its own credentials class which seems to just wrap google.oauth2.credentials objects? Why wouldn't the Firebase SDK accept a google.oauth2.credentials object directly?
I was able to work around it by hacking the ApplicationDefault class that comes with the firebase-admin-python SDK, however this seems a bit backwards.
firebase_credential = firebase_admin.credentials.ApplicationDefault()
firebase_credential._g_credential = credentials
firebase_credential._project_id = SOURCE_PROJECT
In my opinion it would be better if the firebase SDK just made use of the google.auth module which has a much better implementation.
Hi there, I am having some issues using the
firebase_adminpython client with a credential object from outside the SDK.In my use case, I want to initialize the
firebase_adminSDK using a Service Account impersonation credential to list users within the firebase environment.To do this I tried the following:
When running
initialize_appit returns an exception -Illegal Firebase credential provided. App must be initialized with a valid credential instance.Looking into the
firebase-admin-pythonsource code I was able to find the source of the problem. Infirebase_admin/__init__.pyline 209 the code checks whether the suppliedcredentialsobject is an instance offirebase_admin.credentials.Base. If not, then the SDK returns the exception.I don't understand why this is the case. Why does
firebase-admin-pythonhave its own credentials class which seems to just wrapgoogle.oauth2.credentialsobjects? Why wouldn't the Firebase SDK accept agoogle.oauth2.credentialsobject directly?I was able to work around it by hacking the
ApplicationDefaultclass that comes with thefirebase-admin-pythonSDK, however this seems a bit backwards.In my opinion it would be better if the firebase SDK just made use of the
google.authmodule which has a much better implementation.