Kredensial di agen terkelola

Kredensial adalah rahasia yang dikelola server yang memungkinkan agen Anda menjangkau layanan pihak ketiga tanpa rahasia tersebut pernah masuk ke lingkungan agen. Anda menyimpan kredensial satu kali, merujuknya berdasarkan ID, dan proxy keluar akan menyelesaikan serta menyuntikkannya pada waktu permintaan.

Nilai secret hanya dapat ditulis. Setelah disimpan, token tidak pernah ditampilkan oleh endpoint mana pun, sehingga agen yang disusupi tidak dapat membaca kembali token yang digunakannya.

Tempat utama Anda menggunakan kredensial adalah daftar yang diizinkan jaringan di environment.network. Simpan secret terlebih dahulu:

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"
}'

Kemudian, lampirkan ke domain yang diautentikasi:

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": "*" }
            ]
        }
    }
}'

Agen kini membuat permintaan terautentikasi ke api.github.com, dan token tidak pernah ada di dalam sandbox.

Jenis kredensial

Setiap kredensial memiliki type yang menentukan kolom mana yang diterima dan cara penerapannya oleh proxy.

Jenis Kasus penggunaan Perilaku
bearer_token Token akses pribadi, token bot, kunci API statis Proxy menyuntikkan token sebagai header permintaan. Tidak ada logika refresh.
oauth2 Aplikasi OAuth dan alur yang didelegasikan pengguna Proxy menukarkan token refresh dengan token akses dan memperbaruinya saat masa berlakunya habis.
environment_variable SDK klien yang membaca rahasia dari lingkungan proses Lingkungan agen menerima placeholder. Proxy menggantikan secret sebenarnya pada permintaan keluar.

Menggunakan kredensial dalam daftar yang diizinkan jaringan

Tambahkan credential ke aturan daftar yang diizinkan dan proxy akan mengautentikasi setiap permintaan keluar ke domain tersebut. Cara ini direkomendasikan untuk memberikan akses agen ke API pribadi, repositori pribadi, atau bucket pribadi.

Anda dapat menggabungkan aturan yang diautentikasi dan tidak diautentikasi dalam daftar yang diizinkan yang sama:

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" }
            ]
        }
    }
}'

Karena proxy menyelesaikan kredensial per permintaan, kredensial oauth2 memperbarui token aksesnya secara transparan. Interaksi yang berjalan lama tidak akan terganggu saat token akses berakhir.

Menggabungkan credential dan transform

Aturan daftar yang diizinkan juga menerima objek transform inline yang menetapkan header langsung pada aturan. Kedua mekanisme diterapkan oleh proxy keluar di jaringan, sehingga dalam kedua kasus tersebut, nilai header tidak pernah ada di dalam sandbox. Kedua kolom dapat muncul pada aturan yang sama.

Konfigurasi aturan Perilaku
credential saja Proxy menyelesaikan kredensial dan menyisipkan headernya pada setiap permintaan ke domain.
transform saja Injeksi header statis. Header yang Anda tulis dikirim apa adanya.
Keduanya Kredensial diterapkan terlebih dahulu, lalu transform digabungkan di atasnya. Header transform eksplisit akan menang jika keduanya menetapkan kunci yang sama.
Netral Domain diizinkan dan tidak ada header yang disisipkan.

Kredensial layak digunakan saat Anda ingin menyimpan rahasia satu kali dan mereferensikannya dari setiap lingkungan, agen, dan pemicu dalam project Anda, serta saat Anda ingin penanganan refresh dan rotasi token akses dilakukan untuk Anda. transform inline cocok jika nilai termasuk dalam satu panggilan, misalnya token yang Anda buat sendiri tepat sebelum membuat interaksi.

Menggabungkan keduanya adalah hal yang umum. Kredensial membawa header autentikasi dan transform menambahkan apa pun yang diharapkan layanan upstream pada permintaan yang sama:

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

Untuk memindahkan secret dari transform inline ke kredensial, simpan dengan POST /credentials, ganti header auth di transform dengan "credential": "<id>", dan biarkan objek transform lainnya.

Menggunakan kredensial dengan server MCP

Server MCP jarak jauh menggunakan kolom credential yang sama. Tetapkan di alat mcp_server dan proxy akan menyisipkan header autentikasi ke setiap permintaan ke server tersebut:

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"
        }
    ]
}'

credential dan headers mengikuti aturan prioritas yang sama seperti daftar yang diizinkan. Kredensial diterapkan terlebih dahulu dan headers digabungkan di atas, sehingga header eksplisit akan menang jika keduanya menetapkan kunci yang sama:

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

Untuk memindahkan rahasia dari headers inline ke kredensial, simpan dengan POST /credentials dan ganti entri autentikasi di headers dengan credential. Biarkan header lainnya di tempatnya.

Menggunakan kredensial sebagai variabel lingkungan

Beberapa library klien membaca rahasia dari lingkungan proses, bukan menerimanya sebagai header permintaan. Klien mode soket dan polling panjang adalah kasus umum.

Ikat kredensial environment_variable ke nama variabel di bagian 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 menerima string literal dan referensi kredensial secara berdampingan. String literal disisipkan ke dalam penampung sebagai variabel teks biasa normal.

Referensi kredensial tidak. Variabel menerima placeholder __GEMINI_CRED_<credential-id>__, dan proxy menukar rahasia sebenarnya hanya untuk permintaan keluar yang ditujukan ke domain dalam trusted_domains kredensial. Permintaan ke domain lain ditolak, sehingga secret tidak pernah keluar dari perimeter dan placeholder tidak dikirim sebagai gantinya.

Tetapkan trusted_domains pada setiap kredensial environment_variable. Ini adalah kontrol yang mencakup tempat secret dapat digunakan.

Membuat kredensial

Setiap permintaan pembuatan memerlukan type, ditambah kolom mana pun yang diperlukan jenis tersebut.

Saat memanggil REST secara langsung, semua nama kolom menggunakan snake_case. Mengirim kolom camelCase akan menampilkan 400.

Token pemilik

Kredensial token pembawa hanya memerlukan 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"
}'

Respons hanya menampilkan metadata, bukan 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"
}

Secara default, proxy mengirim Authorization: Bearer <token>. Ganti header_name dan prefix untuk menargetkan layanan yang mengharapkan sesuatu yang lain:

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": ""
}'

Konfigurasi ini menghasilkan header x-goog-api-key: key_xxxxxxxxxxxx.

Tabel berikut menunjukkan cara menggabungkan header_name dan prefix:

Konfigurasi Header yang disisipkan
{"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

Kredensial OAuth2 memerlukan client_id, client_secret, refresh_token, dan token_url. Kolom scopes bersifat opsional:

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"]
}'

Pembuatan kredensial OAuth2 melakukan pertukaran token langsung terhadap token_url untuk mengonfirmasi bahwa konfigurasi berfungsi. Kredensial hanya disimpan jika penyedia menampilkan respons token yang berhasil yang berisi access_token. Respons JSON dan form-urlencoded diterima.

Artinya, Anda memerlukan token refresh yang valid dan belum habis masa berlakunya pada saat pembuatan. Jika penyedia menolak penukaran, error akan ditampilkan kepada Anda:

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

Setelah disimpan, proxy akan memperbarui token akses saat masa berlakunya berakhir. Jika penyedia mengganti token refresh dan menampilkan yang baru selama refresh, token baru akan menggantikan token yang disimpan secara otomatis.

Variabel lingkungan

Kredensial environment_variable memerlukan value dan injection_location:

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"
}'

Kolom injection_location memberi tahu proxy di mana dalam permintaan keluar untuk mengganti secret. Metode ini menerima header, query, atau body, baik sebagai string tunggal atau sebagai array saat layanan memerlukan lebih dari satu:

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

Penggantian hanya terjadi di lokasi yang Anda cantumkan. Permintaan yang membawa placeholder ke tempat lain ditolak, bukan dikirim.

Untuk mengikat kredensial ke nama variabel, lihat Menggunakan kredensial sebagai variabel lingkungan.

ID yang dihasilkan

Kolom id bersifat opsional. Jangan sertakan dan layanan akan membuat 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"
}

Berikan ID Anda sendiri jika Anda menginginkan referensi yang stabil dan mudah dibaca untuk digunakan di seluruh interaksi. Karena ID muncul di jalur resource, sebaiknya gunakan alfanumerik huruf kecil dengan tanda hubung atau garis bawah.

Mencantumkan kredensial

Mencantumkan kredensial yang termasuk dalam project Anda. Gunakan parameter penomoran halaman untuk mengontrol ukuran batch respons.

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"

Respons hanya berisi metadata:

{
  "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="
}

Teruskan next_page_token kembali sebagai page_token untuk mengambil halaman berikutnya. Kolom dihilangkan jika tidak ada hasil lebih lanjut.

Parameter Jenis Deskripsi
page_size bilangan bulat Jumlah maksimum kredensial per halaman.
page_token string Token dari next_page_token respons sebelumnya.

Mendapatkan kredensial

Mengambil metadata untuk kredensial tertentu berdasarkan ID-nya.

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"

Responsnya akan terlihat seperti berikut:

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

Meminta kredensial yang tidak ada akan menampilkan 404:

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

Merotasi kredensial

Mengganti secret tanpa menyentuh aturan daftar yang diizinkan, definisi alat, atau variabel lingkungan yang mereferensikannya. Rotasi diterapkan pada resolusi proxy berikutnya.

Permintaan harus menyertakan type, ditambah kolom yang ingin Anda ubah. Kolom yang Anda hilangkan akan mempertahankan nilai saat ini.

Merotasi token pemilik:

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"
}'

Merotasi token refresh OAuth2:

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"
}'

Respons mencerminkan update_time baru:

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

type kredensial ditetapkan saat pembuatan. Untuk mengubahnya, hapus kredensial dan buat yang baru.

Menghapus kredensial

Hapus kredensial dan secret tersimpannya jika tidak diperlukan lagi.

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"

Penghapusan yang berhasil akan menampilkan objek kosong:

{}

Setiap aturan daftar yang diizinkan, alat, atau variabel lingkungan yang masih merujuk ke ID akan gagal diselesaikan, jadi perbarui terlebih dahulu.

Referensi kolom

Kolom yang umum untuk setiap kredensial:

Kolom Jenis Wajib diisi Deskripsi
id string Tidak ID unik. Dibuat sebagai UUID jika tidak ada.
type string Ya Salah satu dari bearer_token, oauth2, environment_variable.
status string Hanya baca Status kredensial saat ini.
create_time string Hanya baca Stempel waktu pembuatan RFC 3339.
update_time string Hanya baca Stempel waktu RFC 3339 dari update terakhir.

Kolom untuk bearer_token:

Kolom Jenis Wajib diisi Deskripsi
token string Ya Hanya tulis. Nilai token.
header_name string Tidak Header yang akan disisipkan. Default-nya adalah Authorization.
prefix string Tidak Awalan nilai. Default-nya adalah Bearer. Setel ke "" jika tidak ada.

Kolom untuk oauth2:

Kolom Jenis Wajib diisi Deskripsi
client_id string Ya Client ID OAuth2.
client_secret string Ya Hanya tulis. Rahasia klien OAuth2.
refresh_token string Ya Hanya tulis. Token refresh yang digunakan untuk mendapatkan token akses.
token_url string Ya Endpoint token penyedia.
scopes array Tidak Cakupan OAuth yang akan diminta.

Kolom untuk environment_variable:

Kolom Jenis Wajib diisi Deskripsi
value string Ya Hanya tulis. Nilai rahasia.
injection_location string atau array Ya Tempat untuk mengganti secret. Satu atau beberapa dari header, query, body.
trusted_domains array Tidak Pola domain yang diizinkan untuk penggantian.

Error

Error menampilkan objek JSON dengan message dan code:

{
  "error": {
    "message": "Credential 'github-production' already exists.; CreateCredential call failed",
    "code": "aborted"
  }
}
Status HTTP code Penyebab
400 invalid_request Kolom wajib diisi tidak ada, kolom tidak diketahui, type tidak didukung, atau validasi OAuth2 gagal.
404 not_found Tidak ada kredensial dengan ID tersebut.
409 aborted Kredensial dengan ID tersebut sudah ada.

Kolom yang tidak diketahui akan ditolak, bukan diabaikan, dan error akan menyebutkan nama kolom:

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

Langkah berikutnya