Anmeldedaten in verwalteten KI-Agenten

Anmeldedaten sind serververwaltete Secrets, mit denen Ihre KI-Agenten auf Drittanbieterdienste zugreifen können, ohne dass das Secret jemals in die Umgebung des KI-Agenten gelangt. Sie speichern ein Anmeldedatenpaar einmal, verweisen per ID darauf und der Egress-Proxy löst es zur Anfragezeit auf und fügt es ein.

Secret-Werte können nur geschrieben werden. Nachdem sie gespeichert wurden, werden sie von keinem Endpunkt zurückgegeben. Ein kompromittierter Agent kann die verwendeten Tokens also nicht auslesen.

Die primäre Stelle, an der Sie Anmeldedaten verwenden, ist die Netzwerk-Zulassungsliste unter environment.network. Speichern Sie das Secret zuerst:

Python

from google import genai

client = genai.Client()

credential = client.credentials.create(
    id="github-production",
    type="bearer_token",
    token="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)

print(f"Credential ID: {credential.id}, Status: {credential.status}")

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

const credential = await client.credentials.create({
    id: "github-production",
    type: "bearer_token",
    token: "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
});

console.log(`Credential ID: ${credential.id}, Status: ${credential.status}`);

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "id": "github-production",
    "type": "bearer_token",
    "token": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}'

Hängen Sie es dann an die Domain an, für die es authentifiziert wird:

Python

interaction = client.interactions.create(
    agent="antigravity-preview-09-2026",
    input="Triage the open issues in my-org/my-repo.",
    environment={
        "type": "remote",
        "network": {
            "allowlist": [
                {"domain": "api.github.com", "credential": "github-production"},
                {"domain": "*"},
            ]
        },
    },
)

JavaScript

const interaction = await client.interactions.create({
    agent: "antigravity-preview-09-2026",
    input: "Triage the open issues in my-org/my-repo.",
    environment: {
        type: "remote",
        network: {
            allowlist: [
                { domain: "api.github.com", credential: "github-production" },
                { domain: "*" },
            ],
        },
    },
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "agent": "antigravity-preview-09-2026",
    "input": "Triage the open issues in my-org/my-repo.",
    "environment": {
        "type": "remote",
        "network": {
            "allowlist": [
                { "domain": "api.github.com", "credential": "github-production" },
                { "domain": "*" }
            ]
        }
    }
}'

Der Agent sendet jetzt authentifizierte Anfragen an api.github.com und das Token ist nie in der Sandbox vorhanden.

Qualifikationstypen

Jede Anmeldedaten haben eine type, die bestimmt, welche Felder akzeptiert werden und wie der Proxy sie anwendet.

Typ Anwendungsfall Verhalten
bearer_token Persönliche Zugriffstokens, Bot-Tokens, statische API-Schlüssel Der Proxy fügt das Token als Anfrageheader ein. Keine Aktualisierungslogik.
oauth2 OAuth-Apps und nutzerdelegierte Abläufe Der Proxy tauscht das Aktualisierungstoken gegen Zugriffstokens ein und aktualisiert sie, wenn sie ablaufen.
environment_variable Client-SDKs, die Secrets aus der Prozessumgebung lesen Die Umgebung des Agents erhält einen Platzhalter. Der Proxy ersetzt das tatsächliche Secret in ausgehenden Anfragen.

Anmeldedaten in der Zulassungsliste für Netzwerke verwenden

Wenn Sie credential einer Zulassungslistenregel hinzufügen, authentifiziert der Proxy jede ausgehende Anfrage an diese Domain. Dies ist die empfohlene Methode, um einem Agent Zugriff auf eine private API, ein privates Repository oder einen privaten Bucket zu gewähren.

Sie können authentifizierte und nicht authentifizierte Regeln in derselben Zulassungsliste kombinieren:

Python

interaction = client.interactions.create(
    agent="antigravity-preview-09-2026",
    input="Sync the open Jira issues into the tracking sheet in my repo.",
    environment={
        "type": "remote",
        "sources": [
            {
                "type": "repository",
                "source": "https://github.com/your-org/backend",
                "target": "/backend-app",
            }
        ],
        "network": {
            "allowlist": [
                {"domain": "github.com", "credential": "github-production"},
                {"domain": "api.atlassian.com", "credential": "jira-oauth"},
                {"domain": "*.googleapis.com"},
            ]
        },
    },
)

JavaScript

const interaction = await client.interactions.create({
    agent: "antigravity-preview-09-2026",
    input: "Sync the open Jira issues into the tracking sheet in my repo.",
    environment: {
        type: "remote",
        sources: [
            {
                type: "repository",
                source: "https://github.com/your-org/backend",
                target: "/backend-app",
            },
        ],
        network: {
            allowlist: [
                { domain: "github.com", credential: "github-production" },
                { domain: "api.atlassian.com", credential: "jira-oauth" },
                { domain: "*.googleapis.com" },
            ],
        },
    },
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "agent": "antigravity-preview-09-2026",
    "input": "Sync the open Jira issues into the tracking sheet in my repo.",
    "environment": {
        "type": "remote",
        "sources": [
            {
                "type": "repository",
                "source": "https://github.com/your-org/backend",
                "target": "/backend-app"
            }
        ],
        "network": {
            "allowlist": [
                { "domain": "github.com", "credential": "github-production" },
                { "domain": "api.atlassian.com", "credential": "jira-oauth" },
                { "domain": "*.googleapis.com" }
            ]
        }
    }
}'

Da der Proxy die Anmeldedaten pro Anfrage auflöst, wird das Zugriffstoken für oauth2-Anmeldedaten transparent aktualisiert. Eine lang andauernde Interaktion wird nicht unterbrochen, wenn das Zugriffstoken abläuft.

credential und transform kombinieren

In Allowlist-Regeln kann auch ein Inline-transform-Objekt verwendet werden, mit dem Header direkt in der Regel festgelegt werden. Beide Mechanismen werden vom Egress-Proxy auf der Leitung angewendet. In beiden Fällen ist der Header-Wert also nie in der Sandbox vorhanden. Beide Felder können in derselben Regel vorkommen.

Regelkonfiguration Verhalten
Nur credential Der Proxy löst die Anmeldedaten auf und fügt den Header in jede Anfrage an die Domain ein.
Nur transform Statische Header-Injection. Die von Ihnen geschriebenen Headern werden unverändert gesendet.
Beides Die Anmeldedaten werden zuerst angewendet, dann werden transform darüber zusammengeführt. Ein expliziter transform-Header hat Vorrang, wenn beide denselben Schlüssel festlegen.
Weder noch Die Domain ist zulässig und es werden keine Header eingefügt.

Anmeldedaten sind nützlich, wenn Sie ein Secret einmal speichern und von jeder Umgebung, jedem Agent und jedem Trigger in Ihrem Projekt darauf verweisen möchten und wenn Sie möchten, dass die Aktualisierung und Rotation von Zugriffstokens für Sie übernommen wird. Ein Inline-transform ist geeignet, wenn der Wert zu einem einzelnen Aufruf gehört, z. B. ein Token, das Sie selbst kurz vor dem Erstellen der Interaktion generieren.

Die Kombination der beiden ist üblich. Die Anmeldedaten enthalten den Authentifizierungsheader und transform fügt alles hinzu, was der Upstream-Dienst für dieselbe Anfrage erwartet:

{
    "domain": "api.atlassian.com",
    "credential": "jira-oauth",
    "transform": {
        "X-Atlassian-Workspace": "my-workspace-id"
    }
}

Wenn Sie ein Secret aus einem Inline-transform in Anmeldedaten verschieben möchten, speichern Sie es mit POST /credentials, ersetzen Sie den Auth-Header in transform durch "credential": "<id>" und lassen Sie den Rest des transform-Objekts unverändert.

Anmeldedaten mit MCP-Servern verwenden

Remote-MCP-Server verwenden dasselbe credential-Feld. Legen Sie ihn in einem mcp_server-Tool fest. Der Proxy fügt den Autorisierungsheader in jede Anfrage an diesen Server ein:

Python

interaction = client.interactions.create(
    agent="antigravity-preview-09-2026",
    input="Create a new issue in my-org/my-repo",
    environment="remote",
    tools=[{
        "type": "mcp_server",
        "name": "github",
        "url": "https://api.githubcopilot.com/mcp",
        "credential": "github-production",
    }],
)

JavaScript

const interaction = await client.interactions.create({
    agent: "antigravity-preview-09-2026",
    input: "Create a new issue in my-org/my-repo",
    environment: "remote",
    tools: [{
        type: "mcp_server",
        name: "github",
        url: "https://api.githubcopilot.com/mcp",
        credential: "github-production",
    }],
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "agent": "antigravity-preview-09-2026",
    "input": "Create a new issue in my-org/my-repo",
    "environment": "remote",
    "tools": [
        {
            "type": "mcp_server",
            "name": "github",
            "url": "https://api.githubcopilot.com/mcp",
            "credential": "github-production"
        }
    ]
}'

Für credential und headers gilt dieselbe Vorrangregel wie für die Zulassungsliste. Die Anmeldedaten werden zuerst angewendet und headers wird darüber eingefügt. Ein expliziter Header hat also Vorrang, wenn beide denselben Schlüssel festlegen:

{
    "type": "mcp_server",
    "name": "jira",
    "url": "https://jira.atlassian.com/mcp",
    "credential": "jira-oauth",
    "headers": {
        "X-Atlassian-Workspace": "my-workspace-id"
    }
}

Wenn Sie ein Secret aus dem Inline-headers in Anmeldedaten verschieben möchten, speichern Sie es mit POST /credentials und ersetzen Sie den Authentifizierungseintrag in headers durch credential. Die anderen Überschriften bleiben an ihrem Platz.

Anmeldedaten als Umgebungsvariablen verwenden

Einige Clientbibliotheken lesen Secrets aus der Prozessumgebung, anstatt sie als Anfrageheader zu akzeptieren. Socket-Modus- und Long-Polling-Clients sind der häufigste Fall.

Binden Sie Anmeldedaten vom Typ environment_variable an einen Variablennamen unter environment.env:

Python

interaction = client.interactions.create(
    agent="antigravity-preview-09-2026",
    input="Run the sync script and check notifications.",
    environment={
        "type": "remote",
        "env": {
            "NODE_ENV": "production",
            "SLACK_BOT_TOKEN": {"credential": "slack-bot-token"},
        },
    },
)

JavaScript

const interaction = await client.interactions.create({
    agent: "antigravity-preview-09-2026",
    input: "Run the sync script and check notifications.",
    environment: {
        type: "remote",
        env: {
            NODE_ENV: "production",
            SLACK_BOT_TOKEN: { credential: "slack-bot-token" },
        },
    },
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "agent": "antigravity-preview-09-2026",
    "input": "Run the sync script and check notifications.",
    "environment": {
        "type": "remote",
        "env": {
            "NODE_ENV": "production",
            "SLACK_BOT_TOKEN": { "credential": "slack-bot-token" }
        }
    }
}'

env akzeptiert sowohl Stringliterale als auch Anmeldedatenreferenzen. Ein Literalstring wird als normale Nur-Text-Variable in den Container eingefügt.

Eine Anmeldedatenreferenz ist das nicht. Die Variable erhält den Platzhalter __GEMINI_CRED_<credential-id>__ und der Proxy setzt das tatsächliche Secret nur für ausgehende Anfragen ein, die an eine Domain in der trusted_domains der Anmeldedaten gesendet werden. Eine Anfrage an eine andere Domain wird abgelehnt. Das Secret verlässt also nie den Perimeter und der Platzhalter wird nicht an seiner Stelle gesendet.

Legen Sie trusted_domains für jede environment_variable-Anmeldedaten fest. Damit wird festgelegt, wo das Secret verwendet werden kann.

Anmeldedaten erstellen

Für jede Erstellungsanfrage ist ein type-Objekt sowie die für diesen Typ erforderlichen Felder erforderlich.

Bei direkten REST-Aufrufen wird für alle Feldnamen die Snake-Case-Schreibweise verwendet. Wenn Sie ein Feld im CamelCase-Format senden, wird 400 zurückgegeben.

Inhabertoken

Für Anmeldedaten mit einem Bearer-Token ist nur Folgendes erforderlich: token

Python

credential = client.credentials.create(
    id="github-production",
    type="bearer_token",
    token="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)

JavaScript

const credential = await client.credentials.create({
    id: "github-production",
    type: "bearer_token",
    token: "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "id": "github-production",
    "type": "bearer_token",
    "token": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}'

In der Antwort werden nur Metadaten zurückgegeben, niemals das Token:

{
  "id": "github-production",
  "type": "bearer_token",
  "status": "active",
  "create_time": "2026-07-15T10:00:00.000000000Z",
  "update_time": "2026-07-15T10:00:00.000000000Z"
}

Standardmäßig sendet der Proxy Authorization: Bearer <token>. Überschreiben Sie header_name und prefix, um einen Dienst anzusprechen, der etwas anderes erwartet:

Python

credential = client.credentials.create(
    id="my-api-key",
    type="bearer_token",
    token="key_xxxxxxxxxxxx",
    header_name="x-goog-api-key",
    prefix="",
)

JavaScript

const credential = await client.credentials.create({
    id: "my-api-key",
    type: "bearer_token",
    token: "key_xxxxxxxxxxxx",
    header_name: "x-goog-api-key",
    prefix: "",
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "id": "my-api-key",
    "type": "bearer_token",
    "token": "key_xxxxxxxxxxxx",
    "header_name": "x-goog-api-key",
    "prefix": ""
}'

Mit dieser Konfiguration wird der Header x-goog-api-key: key_xxxxxxxxxxxx erstellt.

In der folgenden Tabelle sehen Sie, wie header_name und prefix kombiniert werden:

Konfiguration Eingefügter Header
{"token": "ghp_xxx"} Authorization: Bearer ghp_xxx
{"token": "sk_live_xxx"} Authorization: Bearer sk_live_xxx
{"token": "key_xxx", "header_name": "x-goog-api-key", "prefix": ""} x-goog-api-key: key_xxx
{"token": "mytoken", "header_name": "X-API-Token", "prefix": ""} X-API-Token: mytoken

OAuth2

Für OAuth2-Anmeldedaten sind client_id, client_secret, refresh_token und token_url erforderlich. Das Feld scopes ist optional:

Python

credential = client.credentials.create(
    id="jira-oauth",
    type="oauth2",
    client_id="my-client-id",
    client_secret="my-client-secret",
    token_url="https://auth.atlassian.com/oauth/token",
    refresh_token="rt_xxxxxxxxxxxxxxxxxxxx",
    scopes=["read:jira-work", "write:jira-work"],
)

JavaScript

const credential = await client.credentials.create({
    id: "jira-oauth",
    type: "oauth2",
    client_id: "my-client-id",
    client_secret: "my-client-secret",
    token_url: "https://auth.atlassian.com/oauth/token",
    refresh_token: "rt_xxxxxxxxxxxxxxxxxxxx",
    scopes: ["read:jira-work", "write:jira-work"],
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "id": "jira-oauth",
    "type": "oauth2",
    "client_id": "my-client-id",
    "client_secret": "my-client-secret",
    "token_url": "https://auth.atlassian.com/oauth/token",
    "refresh_token": "rt_xxxxxxxxxxxxxxxxxxxx",
    "scopes": ["read:jira-work", "write:jira-work"]
}'

Beim Erstellen von OAuth2-Anmeldedaten wird ein Live-Token-Austausch mit token_url durchgeführt, um zu bestätigen, dass die Konfiguration funktioniert. Die Anmeldedaten werden nur gespeichert, wenn der Anbieter eine erfolgreiche Token-Antwort mit einem access_token zurückgibt. Sowohl JSON- als auch form-urlencoded-Antworten sind zulässig.

Das bedeutet, dass Sie beim Erstellen ein gültiges, nicht abgelaufenes Aktualisierungstoken benötigen. Wenn der Anbieter den Tausch ablehnt, wird der Fehler an Sie zurückgegeben:

{
  "error": {
    "message": "OAuth token validation failed with HTTP 403: {\"error\":\"unauthorized_client\",\"error_description\":\"refresh_token is invalid\"}",
    "code": "invalid_request"
  }
}

Nach dem Speichern aktualisiert der Proxy Zugriffstokens, wenn sie ablaufen. Wenn der Anbieter Aktualisierungstokens rotiert und bei einer Aktualisierung ein neues zurückgibt, wird das gespeicherte Token automatisch durch das neue ersetzt.

Umgebungsvariable

Für environment_variable-Anmeldedaten sind value und injection_location erforderlich:

Python

credential = client.credentials.create(
    id="slack-bot-token",
    type="environment_variable",
    value="xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx",
    trusted_domains=["*.slack.com", "slack.com"],
    injection_location="header",
)

JavaScript

const credential = await client.credentials.create({
    id: "slack-bot-token",
    type: "environment_variable",
    value: "xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx",
    trusted_domains: ["*.slack.com", "slack.com"],
    injection_location: "header",
});

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/credentials" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "id": "slack-bot-token",
    "type": "environment_variable",
    "value": "xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx",
    "trusted_domains": ["*.slack.com", "slack.com"],
    "injection_location": "header"
}'

Das Feld injection_location gibt an, wo im Proxy das Secret in der ausgehenden Anfrage ersetzt werden soll. Es werden header, query oder body akzeptiert, entweder als einzelner String oder als Array, wenn ein Dienst mehr als einen benötigt:

"injection_location": ["header", "query"]

Die Substitution erfolgt nur an den von Ihnen angegebenen Stellen. Eine Anfrage, die den Platzhalter an einer anderen Stelle enthält, wird abgelehnt und nicht weitergeleitet.

Informationen zum Binden der Anmeldedaten an einen Variablennamen finden Sie unter Anmeldedaten als Umgebungsvariablen verwenden.

Generierte IDs

Das Feld id ist optional. Lassen Sie sie weg und der Dienst generiert eine UUID:

{
  "id": "9e545973-4330-49bb-9a44-930cea9fbe3c",
  "type": "bearer_token",
  "status": "active",
  "create_time": "2026-07-15T10:00:00.000000000Z",
  "update_time": "2026-07-15T10:00:00.000000000Z"
}

Geben Sie eine eigene ID an, wenn Sie eine stabile, lesbare Referenz für alle Interaktionen benötigen. Da die ID im Ressourcenpfad enthalten ist, sollten Sie Kleinbuchstaben, Ziffern, Bindestriche oder Unterstriche verwenden.

Anmeldedaten auflisten

Anmeldedaten für Ihr Projekt auflisten. Mit Paginierungsparametern können Sie die Batchgröße der Antwort steuern.

Python

response = client.credentials.list(page_size=10)
for credential in response.credentials:
    print(f"Credential ID: {credential.id}, Type: {credential.type}")

JavaScript

const response = await client.credentials.list({ page_size: 10 });
for (const credential of response.credentials) {
    console.log(`Credential ID: ${credential.id}, Type: ${credential.type}`);
}

REST

curl -X GET "https://generativelanguage.googleapis.com/v1beta/credentials?page_size=10" \
-H "x-goog-api-key: $GEMINI_API_KEY"

Die Antwort enthält nur Metadaten:

{
  "credentials": [
    {
      "id": "github-production",
      "type": "bearer_token",
      "status": "active",
      "create_time": "2026-07-15T10:00:00.000000000Z",
      "update_time": "2026-07-15T10:00:00.000000000Z"
    },
    {
      "id": "jira-oauth",
      "type": "oauth2",
      "status": "active",
      "create_time": "2026-07-15T10:05:00.000000000Z",
      "update_time": "2026-07-15T10:05:00.000000000Z"
    }
  ],
  "next_page_token": "Cj...5aE="
}

Übergeben Sie next_page_token als page_token zurück, um die nächste Seite abzurufen. Das Feld wird weggelassen, wenn es keine weiteren Ergebnisse gibt.

Parameter Typ Beschreibung
page_size integer Maximale Anzahl von Anmeldedaten pro Seite.
page_token String Token aus dem next_page_token einer vorherigen Antwort.

Anmeldedaten abrufen

Metadaten für bestimmte Anmeldedaten anhand der ID abrufen.

Python

credential = client.credentials.get(id="github-production")
print(f"Credential ID: {credential.id}, Status: {credential.status}")

JavaScript

const credential = await client.credentials.get("github-production");
console.log(`Credential ID: ${credential.id}, Status: ${credential.status}`);

REST

curl -X GET "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "x-goog-api-key: $GEMINI_API_KEY"

Die Antwort sieht dann ungefähr so aus:

{
  "id": "github-production",
  "type": "bearer_token",
  "status": "active",
  "create_time": "2026-07-15T10:00:00.000000000Z",
  "update_time": "2026-08-01T14:30:00.000000000Z"
}

Wenn Sie Anmeldedaten anfordern, die nicht vorhanden sind, wird 404 zurückgegeben:

{
  "error": {
    "message": "Result not found.; GetCredential call failed",
    "code": "not_found"
  }
}

Anmeldedaten rotieren

Ersetzen Sie ein Secret, ohne eine Zulassungslistenregel, Tool-Definition oder Umgebungsvariable zu ändern, die darauf verweist. Die Rotation wird bei der nächsten Proxy-Auflösung wirksam.

Die Anfrage muss type sowie die Felder enthalten, die Sie ändern möchten. Für Felder, die Sie nicht angeben, werden die aktuellen Werte beibehalten.

So rotieren Sie ein Inhabertoken:

Python

credential = client.credentials.update(
    id="github-production",
    type="bearer_token",
    token="ghp_new_xxxxxxxxxxxxxxxxxxxx",
)

JavaScript

const credential = await client.credentials.update("github-production", {
    type: "bearer_token",
    token: "ghp_new_xxxxxxxxxxxxxxxxxxxx",
});

REST

curl -X PATCH "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "type": "bearer_token",
    "token": "ghp_new_xxxxxxxxxxxxxxxxxxxx"
}'

So rotieren Sie ein OAuth2-Aktualisierungstoken:

Python

credential = client.credentials.update(
    id="jira-oauth",
    type="oauth2",
    refresh_token="rt_new_xxxxxxxxxxxxxxxxxxxx",
)

JavaScript

const credential = await client.credentials.update("jira-oauth", {
    type: "oauth2",
    refresh_token: "rt_new_xxxxxxxxxxxxxxxxxxxx",
});

REST

curl -X PATCH "https://generativelanguage.googleapis.com/v1beta/credentials/jira-oauth" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
    "type": "oauth2",
    "refresh_token": "rt_new_xxxxxxxxxxxxxxxxxxxx"
}'

Die Antwort spiegelt die neue update_time wider:

{
  "id": "jira-oauth",
  "type": "oauth2",
  "status": "active",
  "create_time": "2026-07-15T10:05:00.000000000Z",
  "update_time": "2026-08-01T14:30:00.000000000Z"
}

Die type einer Anmeldedaten wird bei der Erstellung festgelegt. Wenn Sie es ändern möchten, löschen Sie die Anmeldedaten und erstellen Sie neue.

Qualifikation löschen

Löschen Sie Anmeldedaten und das zugehörige gespeicherte Secret, wenn sie nicht mehr benötigt werden.

Python

client.credentials.delete(id="github-production")

JavaScript

await client.credentials.delete("github-production");

REST

curl -X DELETE "https://generativelanguage.googleapis.com/v1beta/credentials/github-production" \
-H "x-goog-api-key: $GEMINI_API_KEY"

Bei einem erfolgreichen Löschvorgang wird ein leeres Objekt zurückgegeben:

{}

Alle Zulassungslistenregeln, Tools oder Umgebungsvariablen, die noch auf die ID verweisen, können nicht aufgelöst werden. Aktualisieren Sie diese daher zuerst.

Feldverweis

Felder, die für alle Anmeldedaten gelten:

Feld Typ Erforderlich Beschreibung
id String Nein Eindeutige Kennung. Wird als UUID generiert, wenn sie weggelassen wird.
type String Ja Entweder bearer_token, oauth2 oder environment_variable.
status String Schreibgeschützt Der aktuelle Status des Berechtigungsnachweises.
create_time String Schreibgeschützt Zeitstempel der Erstellung im RFC 3339-Format.
update_time String Schreibgeschützt RFC 3339-Zeitstempel der letzten Aktualisierung.

Felder für bearer_token:

Feld Typ Erforderlich Beschreibung
token String Ja Nur Schreibzugriff. Der Tokenwert.
header_name String Nein Einzufügender Header. Die Standardeinstellung ist Authorization.
prefix String Nein Wertpräfix. Die Standardeinstellung ist Bearer. Legen Sie diese Option auf "" fest, wenn Sie keine verwenden möchten.

Felder für oauth2:

Feld Typ Erforderlich Beschreibung
client_id String Ja OAuth2-Client-ID.
client_secret String Ja Nur Schreibzugriff. OAuth2-Clientschlüssel.
refresh_token String Ja Nur Schreibzugriff. Aktualisierungstoken, das zum Abrufen von Zugriffstokens verwendet wird.
token_url String Ja Token-Endpunkt des Anbieters.
scopes Array Nein OAuth-Bereiche, die angefordert werden sollen.

Felder für environment_variable:

Feld Typ Erforderlich Beschreibung
value String Ja Nur Schreibzugriff. Der Secret-Wert.
injection_location String oder Array Ja Wo das Secret ersetzt werden soll. Einer oder mehrere der folgenden Werte: header, query, body.
trusted_domains Array Nein Für die Substitution autorisierte Domainmuster.

Fehler

Bei Fehlern wird ein JSON-Objekt mit einem message und einem code zurückgegeben:

{
  "error": {
    "message": "Credential 'github-production' already exists.; CreateCredential call failed",
    "code": "aborted"
  }
}
HTTP-Status code Ursache
400 invalid_request Ein erforderliches Feld fehlt, ein unbekanntes Feld, ein nicht unterstütztes type oder eine fehlgeschlagene OAuth2-Validierung.
404 not_found Es gibt keine Anmeldedaten mit dieser ID.
409 aborted Ein Anmeldedatenpaar mit dieser ID ist bereits vorhanden.

Unbekannte Felder werden abgelehnt und nicht ignoriert. Der Fehler gibt das Feld an:

{
  "error": {
    "message": "Unknown parameter 'headerName'. Did you mean 'header_name'?",
    "code": "invalid_request"
  }
}

Nächste Schritte