Abrufen des Zugriffsstokens (Sie können diesen Teil lesen) < /h1>
Ich habe kürzlich die Lösung herausgefunden, aber aber für den Zugangstoken; Hier sind die Schritte: < /p>
[*] Geben Sie Ihrem Benutzerkonto die Rolle des Token -Erstellers auf dem Servicekonto (nämlich svc@proj.iam.gserviceAccount.com < /Code>) < /p>
< /li>
Führen Sie dies auf Ihrem Terminal aus und melden Sie sich an < /p>
Code: Select all
gcloud auth application-default login --impersonate-service-account svc@proj.iam.gserviceaccount.com
< Br />
Code: Select all
{
"delegates": [],
"service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/svc@proj.iam.gserviceaccount.com:generateAccessToken",
"source_credentials": {
"account": "",
"client_id": "xxxxxxxxxxxxx.apps.googleusercontent.com",
"client_secret": "xxxxxxxxxxxxxxxxx",
"refresh_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"type": "authorized_user",
"universe_domain": "googleapis.com"
},
"type": "impersonated_service_account"
}
< /code>
Anstelle der einfachen alten Benutzerkonto-Anmeldeinformationen wie folgt: < /pt>
{
"account": "",
"client_id": "xxxxxxxxxxxxx.apps.googleusercontent.com",
"client_secret": "xxxxxxxxxxxxxxxxx",
"quota_project_id": "proj",
"refresh_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"type": "authorized_user",
"universe_domain": "googleapis.com"
}
Code: Select all
export GOOGLE_APPLICATION_CREDENTIALS=/Users/youruser/.config/gcloud/application_default_credentials.json
< /code>
< /li>
Dieser Code wird nun das imitierte Servicekonto erkannt und sein Zugriffs -Token abrufen: < /p>
import google.auth
import google.auth.transport.requests
from google.auth import credentials
creds, project_id = google.auth.default(scopes=scopes, **kwargs)
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
# use `creds` accordingly
< /code>
< /li>
< /ol>
Abzweigung des ID -Tokens (die Frage) < /h1>
Solche Schritte für die Access Token funktioniert nicht beim Abrufen des ID -Tokens. Ich bin mir nicht sicher, ob ich die richtige Funktion verwende (google.oauth2.id_token.fetch_id_token
Code: Select all
import google.auth.transport.requests
import google.oauth2.id_token
"""
From https://google-auth.readthedocs.io/en/master/user-guide.html#identity-tokens
"""
request = google.auth.transport.requests.Request()
creds = google.oauth2.id_token.fetch_id_token(request, aud)
< /code>
Hier ist der Fehler: < /p>
google.auth.exceptions.DefaultCredentialsError: Neither metadata server or valid service account credentials are found.
Zurück zur Frage, ist es möglich? Oder die einzige Möglichkeit besteht darin, die Datei für Service -Account -Anmeldeinformationen herunterzuladen, die ironischerweise gegen Googles Empfehlung entspricht und den Zweck der Identitätswechsel besiegt?