사용자 인증 정보는 서버에서 관리하는 보안 비밀로, 에이전트가 에이전트 환경에 보안 비밀을 입력하지 않고도 서드 파티 서비스에 연결할 수 있습니다. 사용자는 사용자 인증 정보를 한 번 저장하고 ID로 참조하면 이그레스 프록시가 요청 시 이를 확인하고 삽입합니다.
보안 비밀 값은 쓰기 전용입니다. 저장된 후에는 어떤 엔드포인트에서도 반환되지 않으므로 보안이 취약한 에이전트가 사용 중인 토큰을 다시 읽을 수 없습니다.
사용자 인증 정보를 사용하는 기본 위치는 environment.network의 네트워크 허용 목록입니다. 먼저 보안 비밀을 저장합니다.
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}")
자바스크립트
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"
}'
그런 다음 인증하는 도메인에 연결합니다.
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": "*"},
]
},
},
)
자바스크립트
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": "*" }
]
}
}
}'
이제 에이전트는 api.github.com에 인증된 요청을 전송하며 토큰은 샌드박스 내에 존재하지 않습니다.
사용자 인증 정보 유형
모든 사용자 인증 정보에는 프록시가 어떤 필드를 허용하고 어떻게 적용하는지 결정하는 type가 있습니다.
| 유형 | 사용 사례 | 동작 |
|---|---|---|
bearer_token |
개인 액세스 토큰, 봇 토큰, 정적 API 키 | 프록시가 토큰을 요청 헤더로 삽입합니다. 새로고침 로직이 없습니다. |
oauth2 |
OAuth 앱 및 사용자 위임 흐름 | 프록시는 갱신 토큰을 액세스 토큰으로 교환하고 만료되면 새로고침합니다. |
environment_variable |
프로세스 환경에서 보안 비밀을 읽는 클라이언트 SDK | 에이전트의 환경에 자리표시자가 표시됩니다. 프록시는 아웃바운드 요청에서 실제 보안 비밀을 대체합니다. |
네트워크 허용 목록의 사용자 인증 정보 사용
허용 목록 규칙에 credential를 추가하면 프록시가 해당 도메인으로 전송되는 모든 아웃바운드 요청을 인증합니다. 이는 에이전트에게 비공개 API, 비공개 저장소 또는 비공개 버킷에 대한 액세스 권한을 부여하는 데 권장되는 방법입니다.
동일한 허용 목록에서 인증된 규칙과 인증되지 않은 규칙을 혼합할 수 있습니다.
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"},
]
},
},
)
자바스크립트
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" }
]
}
}
}'
프록시는 요청별로 사용자 인증 정보를 확인하므로 oauth2 사용자 인증 정보는 액세스 토큰을 투명하게 새로고침합니다. 액세스 토큰이 만료되어도 장기 실행 상호작용이 중단되지 않습니다.
credential 및 transform 결합
허용 목록 규칙은 규칙에 직접 헤더를 설정하는 인라인 transform 객체도 허용합니다. 두 메커니즘 모두 와이어의 이그레스 프록시에 의해 적용되므로 두 경우 모두 헤더 값이 샌드박스 내에 존재하지 않습니다. 두 필드는 동일한 규칙에 표시될 수 있습니다.
| 규칙 구성 | 동작 |
|---|---|
credential만 지원 |
프록시는 사용자 인증 정보를 확인하고 도메인에 대한 모든 요청에 헤더를 삽입합니다. |
transform만 지원 |
정적 헤더 삽입 작성한 헤더는 그대로 전송됩니다. |
| 둘 다 | 사용자 인증 정보가 먼저 적용된 다음 transform가 맨 위에 병합됩니다. 두 헤더가 동일한 키를 설정하는 경우 명시적 transform 헤더가 우선합니다. |
| 둘 다 아님 | 도메인이 허용되고 헤더가 삽입되지 않습니다. |
사용자 인증 정보는 비밀번호를 한 번 저장하고 프로젝트의 모든 환경, 에이전트, 트리거에서 참조하려는 경우와 액세스 토큰 새로고침 및 순환을 처리하려는 경우에 사용하는 것이 좋습니다. 인라인 transform은 값이 단일 호출에 속하는 경우에 적합합니다. 예를 들어 상호작용을 만들기 직전에 직접 생성하는 토큰이 있습니다.
두 가지를 결합하는 것이 일반적입니다. 사용자 인증 정보는 인증 헤더를 전달하고 transform는 동일한 요청에서 업스트림 서비스가 예상하는 다른 항목을 추가합니다.
{
"domain": "api.atlassian.com",
"credential": "jira-oauth",
"transform": {
"X-Atlassian-Workspace": "my-workspace-id"
}
}
인라인 transform에서 사용자 인증 정보로 보안 비밀을 이동하려면 POST /credentials로 저장하고 transform의 인증 헤더를 "credential": "<id>"로 바꾸고 나머지 transform 객체는 그대로 둡니다.
MCP 서버에서 사용자 인증 정보 사용
원격 MCP 서버는 동일한 credential 필드를 사용합니다. mcp_server 도구에서 설정하면 프록시가 해당 서버에 대한 모든 요청에 인증 헤더를 삽입합니다.
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",
}],
)
자바스크립트
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와 headers은 허용 목록과 동일한 우선순위 규칙을 따릅니다.
인증 정보가 먼저 적용되고 headers가 맨 위에 병합되므로 둘 다 동일한 키를 설정하면 명시적 헤더가 우선합니다.
{
"type": "mcp_server",
"name": "jira",
"url": "https://jira.atlassian.com/mcp",
"credential": "jira-oauth",
"headers": {
"X-Atlassian-Workspace": "my-workspace-id"
}
}
인라인 headers에서 보안 비밀을 인증 정보로 이동하려면 POST /credentials로 저장하고 headers의 인증 항목을 credential로 바꿉니다.
다른 헤더는 원래 위치에 유지합니다.
사용자 인증 정보를 환경 변수로 사용
일부 클라이언트 라이브러리는 요청 헤더로 허용하는 대신 프로세스 환경에서 보안 비밀을 읽습니다. 소켓 모드 및 긴 폴링 클라이언트는 일반적인 사례입니다.
environment_variable 사용자 인증 정보를 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"},
},
},
)
자바스크립트
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는 리터럴 문자열과 사용자 인증 정보 참조를 나란히 허용합니다. 리터럴 문자열이 일반 일반 텍스트 변수로 컨테이너에 삽입됩니다.
사용자 인증 정보 참조는 아닙니다. 변수는 자리표시자 __GEMINI_CRED_<credential-id>__를 수신하고 프록시는 사용자 인증 정보의 trusted_domains에 있는 도메인으로 전송되는 아웃바운드 요청에 대해서만 실제 비밀번호를 스왑합니다. 다른 도메인에 대한 요청은 거부되므로 보안 비밀이 경계를 벗어나지 않으며 자리표시자가 대신 전송되지 않습니다.
모든 environment_variable 사용자 인증 정보에 trusted_domains를 설정합니다. 보안 비밀을 사용할 수 있는 범위를 지정하는 컨트롤입니다.
사용자 인증 정보 만들기
모든 생성 요청에는 type와 해당 유형에 필요한 필드가 필요합니다.
REST를 직접 호출할 때는 모든 필드 이름이 snake_case를 사용합니다. camelCase 필드를 전송하면 400가 반환됩니다.
Bearer 토큰
Bearer 토큰 사용자 인증 정보에는 token만 필요합니다.
Python
credential = client.credentials.create(
id="github-production",
type="bearer_token",
token="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)
자바스크립트
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"
}'
응답은 메타데이터만 반환하고 토큰은 반환하지 않습니다.
{
"id": "github-production",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-07-15T10:00:00.000000000Z"
}
기본적으로 프록시는 Authorization: Bearer <token>를 전송합니다. header_name 및 prefix를 재정의하여 다른 것을 예상하는 서비스를 타겟팅합니다.
Python
credential = client.credentials.create(
id="my-api-key",
type="bearer_token",
token="key_xxxxxxxxxxxx",
header_name="x-goog-api-key",
prefix="",
)
자바스크립트
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": ""
}'
이 구성은 헤더 x-goog-api-key: key_xxxxxxxxxxxx를 생성합니다.
다음 표는 header_name와 prefix가 결합되는 방식을 보여줍니다.
| 구성 | 삽입된 헤더 |
|---|---|
{"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
OAuth2 사용자 인증 정보에는 client_id, client_secret, refresh_token, token_url이 필요합니다. scopes 필드는 선택사항입니다.
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"],
)
자바스크립트
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"]
}'
OAuth2 사용자 인증 정보를 만들면 token_url에 대해 실시간 토큰 교환이 실행되어 구성이 작동하는지 확인합니다. 자격 증명은 제공자가 access_token가 포함된 성공적인 토큰 응답을 반환하는 경우에만 저장됩니다. JSON 응답과 form-urlencoded 응답이 모두 허용됩니다.
즉, 생성 시 유효하고 만료되지 않은 갱신 토큰이 필요합니다. 제공업체가 교환을 거부하면 오류가 반환됩니다.
{
"error": {
"message": "OAuth token validation failed with HTTP 403: {\"error\":\"unauthorized_client\",\"error_description\":\"refresh_token is invalid\"}",
"code": "invalid_request"
}
}
저장되면 프록시는 액세스 토큰이 만료될 때마다 갱신합니다. 제공업체가 갱신 중에 갱신 토큰을 순환하고 새 토큰을 반환하면 새 토큰이 저장된 토큰을 자동으로 대체합니다.
환경 변수
environment_variable 사용자 인증 정보에는 value 및 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",
)
자바스크립트
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"
}'
injection_location 필드는 아웃바운드 요청에서 보안 비밀을 대체할 위치를 프록시에 알려줍니다. header, query 또는 body를 단일 문자열로 또는 서비스에 두 개 이상이 필요한 경우 배열로 허용합니다.
"injection_location": ["header", "query"]
대체는 나열된 위치에서만 발생합니다. 자리표시자를 다른 곳으로 전달하는 요청은 전송되지 않고 거부됩니다.
사용자 인증 정보를 변수 이름에 바인딩하려면 사용자 인증 정보를 환경 변수로 사용을 참고하세요.
생성된 ID
id 필드는 선택사항입니다. 생략하면 서비스에서 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"
}
상호작용 전반에서 사용할 안정적이고 읽기 쉬운 참조가 필요한 경우 자체 ID를 제공합니다. ID는 리소스 경로에 표시되므로 하이픈이나 밑줄이 있는 소문자 영숫자를 사용하는 것이 좋습니다.
사용자 인증 정보 나열
프로젝트에 속한 사용자 인증 정보를 나열합니다. 페이지로 나누기 매개변수를 사용하여 응답 배치 크기를 제어합니다.
Python
response = client.credentials.list(page_size=10)
for credential in response.credentials:
print(f"Credential ID: {credential.id}, Type: {credential.type}")
자바스크립트
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"
대답에는 메타데이터만 포함됩니다.
{
"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="
}
다음 페이지를 가져오기 위해 next_page_token를 page_token로 다시 전달합니다. 더 이상 결과가 없으면 이 필드는 생략됩니다.
| 매개변수 | 유형 | 설명 |
|---|---|---|
page_size |
정수 | 페이지당 최대 사용자 인증 정보 수입니다. |
page_token |
문자열 | 이전 응답의 next_page_token에서 가져온 토큰입니다. |
사용자 인증 정보 가져오기
ID로 특정 사용자 인증 정보의 메타데이터를 가져옵니다.
Python
credential = client.credentials.get(id="github-production")
print(f"Credential ID: {credential.id}, Status: {credential.status}")
자바스크립트
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"
응답은 다음과 유사합니다.
{
"id": "github-production",
"type": "bearer_token",
"status": "active",
"create_time": "2026-07-15T10:00:00.000000000Z",
"update_time": "2026-08-01T14:30:00.000000000Z"
}
존재하지 않는 사용자 인증 정보를 요청하면 404이 반환됩니다.
{
"error": {
"message": "Result not found.; GetCredential call failed",
"code": "not_found"
}
}
사용자 인증 정보 순환
허용 목록 규칙, 도구 정의 또는 이를 참조하는 환경 변수를 수정하지 않고 보안 비밀을 바꿉니다. 회전은 다음 프록시 확인 시 적용됩니다.
요청에는 type와 변경하려는 필드가 포함되어야 합니다. 생략한 필드는 현재 값을 유지합니다.
Bearer 토큰을 순환합니다.
Python
credential = client.credentials.update(
id="github-production",
type="bearer_token",
token="ghp_new_xxxxxxxxxxxxxxxxxxxx",
)
자바스크립트
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"
}'
OAuth2 갱신 토큰을 순환합니다.
Python
credential = client.credentials.update(
id="jira-oauth",
type="oauth2",
refresh_token="rt_new_xxxxxxxxxxxxxxxxxxxx",
)
자바스크립트
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"
}'
대답에는 새로운 update_time가 반영됩니다.
{
"id": "jira-oauth",
"type": "oauth2",
"status": "active",
"create_time": "2026-07-15T10:05:00.000000000Z",
"update_time": "2026-08-01T14:30:00.000000000Z"
}
사용자 인증 정보의 type는 생성 시 고정됩니다. 이를 변경하려면 사용자 인증 정보를 삭제하고 새 사용자 인증 정보를 만드세요.
사용자 인증 정보 삭제
더 이상 필요하지 않은 경우 사용자 인증 정보와 저장된 비밀번호를 삭제합니다.
Python
client.credentials.delete(id="github-production")
자바스크립트
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"
삭제에 성공하면 빈 객체가 반환됩니다.
{}
ID를 여전히 참조하는 허용 목록 규칙, 도구 또는 환경 변수는 해결되지 않으므로 먼저 업데이트하세요.
필드 참조
모든 사용자 인증 정보에 공통적인 필드:
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
문자열 | 아니요 | 고유 식별자입니다. 생략하면 UUID로 생성됩니다. |
type |
문자열 | 예 | bearer_token, oauth2, environment_variable 중 하나입니다. |
status |
문자열 | 읽기 전용 | 인증 정보의 현재 상태입니다. |
create_time |
문자열 | 읽기 전용 | RFC 3339 생성 타임스탬프입니다. |
update_time |
문자열 | 읽기 전용 | 마지막 업데이트의 RFC 3339 타임스탬프입니다. |
bearer_token 필드:
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
token |
문자열 | 예 | 쓰기 전용 토큰 값입니다. |
header_name |
문자열 | 아니요 | 삽입할 헤더입니다. 기본값은 Authorization입니다. |
prefix |
문자열 | 아니요 | 값 접두사입니다. 기본값은 Bearer입니다. 없음은 ""로 설정됩니다. |
oauth2 필드:
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
client_id |
문자열 | 예 | OAuth2 클라이언트 ID입니다. |
client_secret |
문자열 | 예 | 쓰기 전용입니다. OAuth2 클라이언트 보안 비밀번호입니다. |
refresh_token |
문자열 | 예 | 쓰기 전용입니다. 액세스 토큰을 획득하는 데 사용되는 갱신 토큰입니다. |
token_url |
문자열 | 예 | 제공업체 토큰 엔드포인트입니다. |
scopes |
배열 | 아니요 | 요청할 OAuth 범위입니다. |
environment_variable 필드:
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
value |
문자열 | 예 | 쓰기 전용 보안 비밀 값입니다. |
injection_location |
문자열 또는 배열 | 예 | 보안 비밀을 대체할 위치입니다. header, query, body 중 하나 이상입니다. |
trusted_domains |
배열 | 아니요 | 대체에 승인된 도메인 패턴입니다. |
오류
오류는 message 및 code이 포함된 JSON 객체를 반환합니다.
{
"error": {
"message": "Credential 'github-production' already exists.; CreateCredential call failed",
"code": "aborted"
}
}
| HTTP 상태 | code |
원인 |
|---|---|---|
| 400 | invalid_request |
필수 입력란이 누락되었거나, 알 수 없는 필드가 있거나, 지원되지 않는 type가 있거나, OAuth2 유효성 검사에 실패했습니다. |
| 404 | not_found |
해당 ID의 사용자 인증 정보가 없습니다. |
| 409 | aborted |
이미 이 ID를 사용하는 사용자 인증 정보가 있습니다. |
알 수 없는 필드는 무시되지 않고 거부되며 오류에 필드 이름이 지정됩니다.
{
"error": {
"message": "Unknown parameter 'headerName'. Did you mean 'header_name'?",
"code": "invalid_request"
}
}
다음 단계
- 환경: 에이전트가 코드를 실행하고 파일을 유지하는 방법을 알아봅니다.
- 에이전트 개요: 관리 에이전트의 핵심 개념을 알아봅니다.
- 맞춤 에이전트 빌드:
AGENTS.md및SKILL.md를 사용하여 자체 에이전트를 정의합니다.