Untuk memberikan akses ke agen Anda ke alat dan layanan eksternal (seperti tugas Jira atau repositori GitHub) atas nama pengguna akhir tertentu, konfigurasikan penyedia autentikasi 3-legged OAuth di pengelola autentikasi Agent Identity.
Dengan mengelola kredensial dan token, penyedia autentikasi 3-legged OAuth menghilangkan kebutuhan akan kode kustom untuk menangani alur autentikasi.
Alur kerja 3-legged OAuth
Penyedia autentikasi 3-legged OAuth memerlukan izin pengguna karena agen mengakses resource atas nama pengguna.
- Permintaan dan pengalihan: Antarmuka chat meminta pengguna untuk login lalu mengalihkan pengguna ke halaman izin aplikasi pihak ketiga.
- Izin dan penyimpanan: Setelah pengguna memberikan izin, pengelola autentikasi Agent Identity akan menyimpan token OAuth yang dihasilkan di vault kredensial yang dikelola Google.
- Penyisipan: Saat Anda menggunakan Agent Development Kit (ADK), agen akan otomatis mengambil token dari penyedia autentikasi dan menyisipkannya ke header pemanggilan alat.
Sebelum memulai
- Pastikan Anda telah memilih metode autentikasi yang benar.
-
Aktifkan Agent Identity API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran. - Buat dan deploy agen.
- Pastikan Anda memiliki aplikasi frontend untuk menangani permintaan login pengguna dan pengalihan ke halaman izin pihak ketiga.
- Pastikan Anda memiliki peran yang diperlukan untuk menyelesaikan tugas ini.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk membuat dan menggunakan penyedia autentikasi 3-legged, minta administrator untuk memberi Anda peran IAM berikut di project:
-
Untuk membuat penyedia autentikasi:
- Admin Agent Identity (
roles/agentidentity.admin) - Editor Agent Identity (
roles/agentidentity.editor)
- Admin Agent Identity (
-
Untuk menggunakan penyedia autentikasi:
- Pengguna Agent Identity (
roles/agentidentity.user) - Pengguna Vertex AI (
roles/aiplatform.user) - Pelanggan Service Usage (
roles/serviceusage.serviceUsageConsumer)
- Pengguna Agent Identity (
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk membuat dan menggunakan penyedia autentikasi 3-legged. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk membuat dan menggunakan penyedia autentikasi 3-legged:
-
Untuk membuat penyedia autentikasi:
agentidentity.authProviders.create -
Untuk menggunakan penyedia autentikasi:
-
agentidentity.authProviders.retrieveCredentials -
aiplatform.endpoints.predict -
aiplatform.sessions.create
-
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Membuat penyedia autentikasi 3-legged
Buat penyedia autentikasi untuk menentukan konfigurasi dan kredensial untuk aplikasi pihak ketiga.
Untuk membuat penyedia autentikasi 3-legged, gunakan gcloud CLI:
-
Konfigurasikan aplikasi klien OAuth Anda untuk mendaftarkan klien dan mendapatkan client ID serta rahasia klien. Tentukan URI pengalihan menggunakan template di bagian tersebut.
-
Buat penyedia autentikasi menggunakan kredensial klien Anda:
gcloud alpha agent-identity authProviders create
AUTH_PROVIDER_NAME\ --project="PROJECT_ID" \ --location="LOCATION" \ --three-legged-oauth-client-id="CLIENT_ID" \ --three-legged-oauth-client-secret="CLIENT_SECRET" \ --three-legged-oauth-authorization-url="AUTHORIZATION_URL" \ --three-legged-oauth-token-url="TOKEN_URL" - Pastikan penyedia autentikasi Anda muncul dalam daftar dan statusnya adalah
ENABLED:gcloud alpha agent-identity authProviders list \ --project="
PROJECT_ID" \ --location="LOCATION" -
Berikan izin akses untuk mengizinkan agen dan lingkungan pengembangan lokal Anda mengambil kredensial dari penyedia autentikasi. Untuk mengizinkan agen yang di-deploy dan akun pengguna pribadi Anda mengakses penyedia autentikasi, berikan peran Pengguna Agent Identity (
roles/agentidentity.user) pada resource penyedia autentikasi:-
Berikan akses ke SPIFFE ID agen yang di-deploy (Agent Identity):
gcloud alpha agent-identity authProviders add-iam-policy-binding
AUTH_PROVIDER_NAME\ --project="PROJECT_ID" \ --location="LOCATION" \ --role="roles/agentidentity.user" \ --member="principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/aiplatform/projects/PROJECT_NUMBER/locations/LOCATION/reasoningEngines/ENGINE_ID" -
Berikan akses ke akun pengguna pribadi Anda untuk pengembangan dan pengujian lokal (
adk web):gcloud alpha agent-identity authProviders add-iam-policy-binding
AUTH_PROVIDER_NAME\ --project="PROJECT_ID" \ --location="LOCATION" \ --role="roles/agentidentity.user" \ --member="user:USER_EMAIL"
-
Ganti kode berikut:
PROJECT_ID: Project ID Anda Google Cloud .LOCATION: Lokasi tempat penyedia autentikasi dan agen Anda di-deploy (misalnya,us-west1).AUTH_PROVIDER_NAME: Nama untuk penyedia autentikasi Anda (misalnya,bigquery-mcp-3lo-authprovider).AUTHORIZATION_URL: URL server otorisasi (misalnya,https://accounts.google.com/o/oauth2/v2/auth).TOKEN_URL: URL server token (misalnya,https://oauth2.googleapis.com/token).CLIENT_ID: Client ID OAuth yang Anda buat dari layanan pihak ketiga.CLIENT_SECRET: Rahasia klien OAuth yang Anda buat dari layanan pihak ketiga.ORGANIZATION_ID: ID organisasi Anda Google Cloud .PROJECT_NUMBER: Nomor Google Cloud project Anda.ENGINE_ID: ID agen mesin penalaran yang di-deploy.USER_EMAIL: Alamat email akun pengguna pribadi Anda.
Mengonfigurasi aplikasi klien OAuth Anda
Sebelum mendaftarkan kredensial klien OAuth Anda, dapatkan client ID dan rahasia klien dari server otorisasi pihak ketiga (misalnya, Google, GitHub, atau Jira).
Jika Anda terhubung ke layanan pihak ketiga di luar Google Cloud, dapatkan kredensial klien OAuth dari portal developer layanan tersebut dan lewati langkah-langkah di bagian ini.
Mendaftarkan URI pengalihan
Saat mengonfigurasi kredensial klien OAuth, Anda harus mendaftarkan URI pengalihan callback khusus penyedia autentikasi.
Buat URI pengalihan menggunakan template berikut:
https://agentidentitycredentials.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/authProviders/AUTH_PROVIDER_NAME/oauthcallbackGanti kode berikut:
PROJECT_ID: Project ID Anda Google Cloud .LOCATION: Region tempat penyedia autentikasi Anda akan di-deploy (misalnya,us-west1).AUTH_PROVIDER_NAME: Nama penyedia autentikasi Anda.
Contoh:
https://agentidentitycredentials.googleapis.com/v1alpha/projects/my-project/locations/us-west1/authProviders/bigquery-mcp-3lo-authprovider/oauthcallbackJika Anda terhubung ke Google Cloud layanan (seperti BigQuery), Anda dapat mengonfigurasi layar izin dan membuat kredensial klien OAuth di Google Cloud konsol:
-
Konfigurasikan layar izin OAuth:
- Di Google Cloud konsol, buka halaman APIs & Services >layar izin OAuth.
- Di bagian App information, masukkan nama aplikasi (seperti BigQuery Manager Application) dan email dukungan.
- Di bagian Audience, pilih Internal atau External.
- Masukkan informasi kontak Anda untuk menerima notifikasi.
- Baca dan setujui Kebijakan Data Pengguna Layanan Google API Kebijakan.
- Klik Finish.
-
Buat kredensial klien OAuth Anda:
- Di Google Cloud konsol, buka halaman APIs & Services >OAuth consent screen >Clients.
- Klik Create credentials >OAuth client ID.
- Pilih opsi aplikasi web dari daftar.
- Masukkan nama yang mudah dikenali untuk klien OAuth Anda.
- Di bagian Authorized redirect URIs , klik Add URI , lalu masukkan URI pengalihan yang Anda buat.
- Klik Create. Di dialog OAuth client created , salin nilai Client ID dan Client Secret yang dihasilkan.
-
Mengautentikasi dalam kode agen Anda
Untuk mengautentikasi agen Anda, Anda dapat menggunakan ADK atau memanggil Agent Identity API secara langsung.
ADK
Referensi penyedia autentikasi dalam kode agen Anda menggunakan kumpulan alat MCP di ADK.
from google.adk.agents.llm_agent import LlmAgent from google.adk.auth.credential_manager import CredentialManager from google.adk.integrations.agent_identity import GcpAuthProvider, GcpAuthProviderScheme from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams from google.adk.tools.mcp_tool.mcp_toolset import McpToolset from google.adk.auth.auth_tool import AuthConfig # Register Google Cloud auth provider CredentialManager.register_auth_provider(GcpAuthProvider()) # The URI to redirect the user to after consent is granted. CONTINUE_URI = "https://YOUR_FRONTEND_URL/validateUserId" # Create auth provider scheme # Note: If using the legacy V1 API, the resource name uses 'connectors' # instead of 'authProviders': projects/.../connectors/... auth_scheme = GcpAuthProviderScheme( name="projects/PROJECT_ID/locations/LOCATION/authProviders/AUTH_PROVIDER_NAME", continue_uri=CONTINUE_URI ) # Configure an MCP tool with the authentication scheme. toolset = McpToolset( connection_params=StreamableHTTPConnectionParams(url="https://YOUR_MCP_SERVER_URL"), auth_scheme=auth_scheme, ) # Initialize the agent with the authenticated tools. agent = LlmAgent( name="AGENT_NAME", model="gemini-2.5-flash", instruction="AGENT_INSTRUCTIONS", tools=[toolset], )
Contoh: Menghubungkan ke BigQuery MCP
Contoh berikut menunjukkan konfigurasi agent.py yang menghubungkan agen ke server BigQuery MCP:
import os from google.adk.agents import Agent from google.adk.apps import App from google.adk.auth.credential_manager import CredentialManager from google.adk.integrations.agent_identity import GcpAuthProvider, GcpAuthProviderScheme from google.adk.models import Gemini from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams from google.adk.tools.mcp_tool.mcp_toolset import McpToolset import google.auth from google.genai import types _, project_id = google.auth.default() os.environ["GOOGLE_CLOUD_PROJECT"] = "PROJECT_ID" os.environ["GOOGLE_GENAI_USE_VERTEXAI"] = "True" bigquery_mcp_auth_provider_id = "AUTH_PROVIDER_NAME" bigquery_mcp_endpoint = os.environ.get( "BIGQUERY_MCP_ENDPOINT", "https://bigquery.googleapis.com/mcp" ) # Register Google Cloud auth provider CredentialManager.register_auth_provider(GcpAuthProvider()) # URI to redirect user to after consent is granted. CONTINUE_URI = "http://127.0.0.1:8501/validateUserId" bigquery_mcp_auth_scheme = GcpAuthProviderScheme( name=f"projects/{project_id}/locations/LOCATION/authProviders/{bigquery_mcp_auth_provider_id}", scopes=["https://www.googleapis.com/auth/bigquery"], continue_uri=CONTINUE_URI, ) bigquery_mcp_tools = McpToolset( connection_params=StreamableHTTPConnectionParams(url=bigquery_mcp_endpoint), auth_scheme=bigquery_mcp_auth_scheme, errlog=None, ) root_agent = Agent( name="root_agent", model=Gemini( model="gemini-2.5-flash", retry_options=types.HttpRetryOptions(attempts=3), ), instruction=( "You are a helpful AI assistant designed to provide accurate and useful" " information. You can also use your BigQuery MCP tools to look up" " BigQuery data." ), tools=[bigquery_mcp_tools], ) app = App( root_agent=root_agent, name="AGENT_NAME", )
ADK
Referensi penyedia autentikasi dalam kode agen Anda menggunakan alat fungsi yang diautentikasi di ADK.
import httpx from google.adk.agents.llm_agent import LlmAgent from google.adk.auth.credential_manager import CredentialManager from google.adk.integrations.agent_identity import GcpAuthProvider from google.adk.integrations.agent_identity import GcpAuthProviderScheme from google.adk.apps import App from google.adk.auth.auth_credential import AuthCredential from google.adk.auth.auth_tool import AuthConfig from google.adk.tools.authenticated_function_tool import AuthenticatedFunctionTool from vertexai import agent_engines # First, register Google Cloud auth provider CredentialManager.register_auth_provider(GcpAuthProvider()) # The URI to redirect the user to after consent is completed. CONTINUE_URI = "WEB_APP_VALIDATE_USER_URI" # Create Auth Config spotify_auth_config = AuthConfig( auth_scheme=GcpAuthProviderScheme( name="projects/PROJECT_ID/locations/LOCATION/authProviders/AUTH_PROVIDER_NAME", continue_uri=CONTINUE_URI ) ) # Use the Auth Config in Authenticated Function Tool spotify_search_track_tool = AuthenticatedFunctionTool( func=spotify_search_track, auth_config=spotify_auth_config ) # Sample function tool async def spotify_search_track(credential: AuthCredential, query: str) -> str | list: token = None if credential.http and credential.http.credentials: token = credential.http.credentials.token if not token: return "Error: No authentication token available." async with httpx.AsyncClient() as client: response = await client.get( "https://api.spotify.com/v1/search", headers={"Authorization": f"Bearer {token}"}, params={"q": query, "type": "track", "limit": 1}, ) # Add your own logic here agent = LlmAgent( name="AGENT_NAME", model="gemini-2.5-flash", instruction="AGENT_INSTRUCTIONS", tools=[spotify_search_track_tool], ) app = App( name="APP_NAME", root_agent=agent, ) vertex_app = agent_engines.AdkApp(app_name=app)
ADK
Referensi penyedia autentikasi dalam kode agen Anda menggunakan kumpulan alat MCP Registry Agen di ADK.
from google.adk.agents.llm_agent import LlmAgent from google.adk.auth.credential_manager import CredentialManager from google.adk.integrations.agent_identity import GcpAuthProvider from google.adk.integrations.agent_identity import GcpAuthProviderScheme from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams from google.adk.tools.mcp_tool.mcp_toolset import McpToolset from google.adk.auth.auth_tool import AuthConfig from google.adk.integrations.agent_registry import AgentRegistry # First, register Google Cloud auth provider CredentialManager.register_auth_provider(GcpAuthProvider()) # The URI to redirect the user to after consent is completed. CONTINUE_URI="WEB_APP_VALIDATE_USER_URI" # Create Google Cloud auth provider scheme auth_scheme = GcpAuthProviderScheme( name="projects/PROJECT_ID/locations/LOCATION/authProviders/AUTH_PROVIDER_NAME", continue_uri=CONTINUE_URI ) # Set Agent Registry registry = AgentRegistry(project_id="PROJECT_ID", location="global") toolset = registry.get_mcp_toolset( mcp_server_name=( "projects/PROJECT_ID/locations/" "global/mcpServers/" "agentregistry-00000000-0000-0000-0000-000000000000" ), auth_scheme=auth_scheme, ) # Example MCP tool toolset = McpToolset( connection_params=StreamableHTTPConnectionParams(url="MCP_URL"), auth_scheme=auth_scheme, ) agent = LlmAgent( name="AGENT_NAME", model="MODEL_NAME", instruction="AGENT_INSTRUCTIONS", tools=[toolset], )
Memanggil API secara langsung
Jika Anda tidak menggunakan ADK, agen Anda harus memanggil agentidentitycredentials.retrieveCredentials API untuk mendapatkan token.
Karena ini adalah alur OAuth multi-langkah, agen Anda harus menangani siklus proses operasi:
- Permintaan awal: Agen memanggil
retrieveCredentials. - Izin diperlukan: Jika pengguna belum memberikan izin, API akan menampilkan
respons yang berisi hasil sebagai
uri_consent_required. Respons ini akan berisiauthorization_uridan aconsent_nonce. - Pengalihan frontend: Aplikasi Anda harus mengalihkan pengguna ke
authorization_uri. - Penyelesaian: Setelah pengguna memberikan izin, panggil
FinalizeCredentialsmenggunakanconsent_nonceuntuk menyelesaikan alur dan mendapatkan token.
Mengupdate aplikasi sisi klien Anda
Untuk menangani login dan pengalihan pengguna untuk 3-legged OAuth, aplikasi sisi klien Anda harus menerapkan langkah-langkah berikut untuk mengelola izin pengguna dan melanjutkan percakapan:
Server UI contoh
Anda dapat mendownload dan menjalankan server UI contoh lengkap yang menggunakan
uvicorn. Sebelum memulai, pastikan Anda memiliki akun GitHub
dan pip terinstal.
Untuk menyiapkan dan menjalankan server UI contoh, lakukan hal berikut:
-
Clone repositori GitHub
adk-python:git clone https://github.com/google/adk-python.git
-
Buka repositori dan aktifkan lingkungan virtual Python:
cd adk-python python3 -m venv .venv source .venv/bin/activate
-
Buka direktori klien UI contoh:
cd contributing/samples/integrations/gcp_auth/client
-
Instal dependensi klien:
pip install -r requirements.txt
-
Sebelum memulai server, tetapkan variabel lingkungan
AGENT_PROJECT_DIRuntuk menentukan direktori tempat kode agen Anda berada. Jika tidak, aplikasi akan secara default mencari agen di folder induk direktori klien.Luncurkan server UI contoh menggunakan
uvicorn. Pastikan port cocok dengan URI pengalihan yang dikonfigurasi di klien OAuth Anda:export AGENT_PROJECT_DIR="/path/to/your/agent_project" uvicorn main:app --port 8501 --reload
-
Buka
http://localhost:8501di browser Anda. (Catatan: Anda harus menggunakanlocalhostdan bukan127.0.0.1, karena URL pengalihan OAuth secara khusus memerlukan nama hostlocalhost.) Tentukan setelan Anda, klik Save & Apply Settings, lalu berinteraksi dengan agen Anda.
Aplikasi UI kustom
Untuk menerapkan kemampuan ini langsung di aplikasi UI kustom, lakukan langkah-langkah berikut:
- Menangani pemicu otorisasi
- Mengimplementasikan endpoint validasi pengguna
- Melanjutkan percakapan agen
Menangani pemicu otorisasi
Saat agen memerlukan izin pengguna, agen akan menampilkan panggilan fungsi adk_request_credential. Aplikasi Anda harus mencegat panggilan ini untuk memulai dialog atau pengalihan otorisasi pengguna.
Kelola konteks sesi dengan mencatat consent_nonce yang diberikan oleh penyedia autentikasi. Nonce ini diperlukan untuk memverifikasi pengguna selama langkah validasi. Simpan nilai auth_config dan auth_request_function_call_id dalam sesi untuk memfasilitasi kelanjutan alur setelah pengguna memberikan izin.
if (fc := get_auth_request_function_call(event_data)): print("--> Authentication required by agent.") try: auth_config = get_auth_config(fc) auth_uri, consent_nonce = handle_adk_request_credential( auth_config, AUTH_PROVIDER_NAME, request.user_id ) if auth_uri: event_data['popup_auth_uri'] = auth_uri fc_id = ( fc.get('id') if isinstance(fc, dict) else getattr(fc, 'id', None) ) event_data['auth_request_function_call_id'] = fc_id event_data['auth_config'] = auth_config.model_dump() # Store session state if session_id: consent_sessions[session_id] = { "user_id": request.user_id, "consent_nonce": consent_nonce } except Exception as e: print(f"Error handling adk_request_credential: {e}") # Optionally, add logic to inform the user about the error. def handle_adk_request_credential(auth_config, auth_provider_name, user_id): ec = auth_config.exchanged_auth_credential if ec and ec.oauth2: oauth2 = ec.oauth2 return oauth2.auth_uri, oauth2.nonce return None, None
Mengimplementasikan endpoint validasi pengguna
Implementasikan endpoint validasi di server web Anda (URI yang sama yang diberikan sebagai continue_uri selama konfigurasi). Endpoint ini harus melakukan hal berikut:
- Menerima
user_id_validation_state,auth_provider_name, danuuidsebagai parameter kueri. - Mengambil nilai
user_iddanconsent_noncedari penyimpanan sesi Anda. Jika beberapa alur otorisasi berjalan secara bersamaan, gunakanuuiduntuk mencocokkan sesi yang benar. - Panggil API penyedia autentikasi dengan parameter ini.
FinalizeCredentials - Tutup jendela otorisasi setelah menerima respons keberhasilan.
Contoh: Endpoint validasi FastAPI (main.py)
Contoh berikut menunjukkan endpoint validasi FastAPI lengkap yang menangani callback OAuth dan menyelesaikan kredensial pengguna:
@app.api_route("/validateUserId", methods=["GET"]) async def validate_user(request: Request): auth_provider_name = request.query_params.get("auth_provider_name") session_id = request.cookies.get("session_id") session = consent_sessions.get(session_id, {}) payload = { "userId": session.get("user_id"), "userIdValidationState": request.query_params.get( "user_id_validation_state" ), "consentNonce": session.get("consent_nonce"), } base_url = "https://agentidentitycredentials.googleapis.com/v1alpha" finalize_url = f"{base_url}/{auth_provider_name}/credentials:finalize" try: async with httpx.AsyncClient(timeout=30.0) as client: resp = await client.post(finalize_url, json=payload) resp.raise_for_status() except httpx.HTTPError as e: err_text = e.response.text if hasattr(e, "response") else str(e) status = e.response.status_code if hasattr(e, "response") else 500 return HTMLResponse(err_text, status_code=status) return HTMLResponse(""" <script> window.close(); </script> <p>Success. You can close this window.</p> """)
Melanjutkan percakapan agen
Setelah pengguna memberikan izin dan jendela otorisasi ditutup, ambil nilai auth_config dan auth_request_function_call_id dari data sesi Anda. Untuk melanjutkan percakapan, sertakan detail ini dalam permintaan baru ke agen sebagai function_response.
if (request.is_auth_resume and session.auth_request_function_call_id and session.auth_config): auth_content = types.Content( role='user', parts=[ types.Part( function_response=types.FunctionResponse( id=session.auth_request_function_call_id, name='adk_request_credential', response=session.auth_config ) ) ], ) # Send message to agent async for event in agent.async_stream_query( user_id=request.user_id, message=auth_content, session_id=session_id, ): # ...
Men-deploy agen
Saat Anda men-deploy agen ke Google Cloud, pastikan Agent Identity di aktifkan.
Jika Anda men-deploy ke
Agent Runtime di Gemini Enterprise Agent Platform
, gunakan
identity_type=AGENT_IDENTITY flag:
import vertexai
from vertexai import types
from vertexai.agent_engines import AdkApp
# Initialize the Vertex AI client with v1beta1 API for Agent Identity support
client = vertexai.Client(
project="PROJECT_ID",
location="LOCATION",
http_options=dict(api_version="v1beta1")
)
# Use the proper wrapper class for your Agent Framework (e.g., AdkApp)
app = AdkApp(agent=agent)
# Deploy the agent with Agent Identity enabled
remote_app = client.agent_engines.create(
agent=app,
config={
"identity_type": types.IdentityType.AGENT_IDENTITY,
"requirements": [
"google-cloud-aiplatform[agent_engines,adk]",
"google-adk[agent-identity]"
],
},
)
Langkah berikutnya
- Memecahkan masalah autentikasi Agent Identity
- Ringkasan Agent Identity
- Mengautentikasi menggunakan 2-legged OAuth dengan pengelola autentikasi
- Mengautentikasi menggunakan kunci API dengan pengelola autentikasi
- Mengelola penyedia autentikasi Agent Identity