Падвойная мяжа OAuth для MCP-шлюзаў: захоўваем ідэнтычнасць карыстальніка
MCP-шлюзы не павінны зводзіць кожны выклік да аднаго сэрвіснага акаўнта. Праверка ўваходных запытаў і абмен OAuth ад імя карыстальніка захоўваюць ідэнтычнасць кожнага карыстальніка.
Крыніцы: Solving the Identity Termination Problem in MCP Gateway Architectures
Шлюз, які знаходзіцца між агентам, кераваным MCP, і корпаратывнымі сістэмамі, павінен мець два межы OAuth, каб адам, які падаў запіт, заставаўся ідэнтыфікуемым у кожной сістэме, якую тычыцца агент.
Працоўная несправнасць
Разберамся з тыповай несправнасцю. Савец прасі агента праз шлюз MCP запрацаваць заявку для свайго колегі. Шлюз пераканаецца ў ідэнтычнасці савеца за дапамогою корпаратывнага прадаўца ідэнтытэта, паверыць токен носіцеля і перадае запіт API ITSM, якая стварае заявку. Чэрэз месцы аўдытар ачынае базу заявак і бачыць, што на всіх заявках, якія запрацаваў агент, указанае аднае імя: ідэнтытэт самога прыкладнага програмы шлюза. Аслівныя прасільнікі не прысутныя ў запісах.
Той самы канцэл працуе ў кожной сістэме, якая знаходзіцца пасля шлюза. Сістэма кадраў прызначае кожны запіт на відпачынак на рахунак службовага акаунта шлюза, рэестр актываў прызначае кожную перадачу прыладаў на яго, а працэс закупаў выказвае яго як апраўніка кожнага запіту. Айдэнтычнасць заканчываецца на шлюзе, і нічога далей не можа яе вярнуць.
Шлюзы MCP сталі стандартным мостам межа агентамі LLM і корпаратыўскімі сістэмамі зберагання даных, пры тым большасць практычных рэалізацый заставляе застацца без адказу на адна пытанне: чыяй айдэнтычнасці разрашае кожны вызов, які надходзіць пасля шлюза? Два анты-патэрны домінуюць у гэтым аспекце.
Заканчана ідэнтыфікацыя. Пасля пераканальвання, хто выкланяе, шлюз ведае справы з кожным бэкэндам як з аднам спільным прынцыпалам службы. Што бы ён не рабіў з IT-сістэмай, сістэмай кадраў і процэсамі закупкаў, гэта атрыбуецца яго сэрвіснаму акаунту, а не чалавеку, які падаў запіт. Хронікі аўдыту стаюць беспрагоднымі, а прынцып мінімальных праваў выгаршваецца. Ненадлежна працюючы праграма можа выкарыстаць всю можлівасць шлюза проты будзь-каго бэкэнда, да якога ён можа дасягнуць.
Давайце даверыць кліенту. Шлюз прыме які-небудзь токен-носіцель, які прыйшоў, і перадае яго без змян да API-сервісаў, не пераканальваючы выдавача, аудыэнцыю чы меры даступу. Кража токена на будзь-якім этапе маршруту агента тады тыха автарызуе будзь-якія запыты да наступных сервісаў.
Ні адзэндзае не ўзьмліваны для корпаратыўскага AI-агента, боўш за ўсё пад функцыяй карыстоўвання правілаў у рамках Framework для карыстоўвання рызыкаў AI ад NIST, якая выказвае патрабаванне пра зберэнне адпаведнасці кожнага аддзела за автаматызаваныя дзеянні на рэгулююцыхся сістэмах.
Праект
Дызайн мае два межы OAuth. На канцы кліента, увайшаючы межа, выкарыстоўваецца для выяўлення і праверкі токена дазволу на дэлегаванне, тыям самым токена тыпу bearer token ад OAuth 2.0 (RFC 6749), выданага корыстувальніку, які выкананае запыт, для аудыянсу шлюза. Выходная межа выкарыстоўваецца для адмены адмены (в духу адмены токенаў RFC 8693) або, калі ланцуг доверы яго дазволяе, для прымітнага перадачы дэлегавання, і стварае токен для аудыянсу ніжэй у ланцугу, які ўсё ўсё несе ідэнтыфікатор первіснага корыстувальніка.
Разрэшэнне на вікорыстоўванне інструмента выявляецца на межы, на адваротнае ад аналізаваных транзакцыйных дакументаў, а не ў самай рэалізацыі інструмента. Чырвоным пунктом яўляецца тое, што перадача ідэнтыфікатора ўсё час адбываецца праз шлюз, а не як нешта, што кожны інструмент чы рэзервны сервер павінны памяцаць.
Шаблон: Delegated Boundary OAuth
Короткая версія: шлюз выкарыстоўвае две межы OAuth, а не адну, а ідэнтыфікатор карыстальніка ёсць дакумент, які пераходзіць між ямі.
Входныя межы. Адгэтуванне токена-несуча, перакананне ў адпаведнасці выдавача і аб’екта выкарыстоўвання, а таксама аналіз утварэнняў выконваюцца ў аднам слое гэтага шлюза, зазвычай у проміжнай супрацоўцы запытоў або у інжэктары залежнасцяў у стылі FastMCP, які працюе раней за кожную функцыю інструмента. Сюды і адпавідае на пытанне «хто выклікае і чы розрашана яму вікорыстоўваць гэты інструмент?», і жадна рэалізацыя інструмента не можа яго праігнораваць. Спраўка адносу межы да інструмента ўжо ў форме дэкларацыі: кожны выкладзены інструмент называе тыя OAuth-межы, якія яму трэба, і межа адмовляецца яго запускаваць, калі токен іх не мае. Адмова ўжо ў форме структураванага браку прав, а не коду 5xx, які выходзіць пасля глыбокай перакананні ў правах, якая спалюе рэсурсы пад час выканання.
Выходныя межы. Аўтэнтыфікацыя вызова, які надходзіць да ніжэйшага рывня, адбываецца за дапамою токена, у яком указваецца імя первіснага корыстніка, а не за дапамою ідэнтыфікатора самага шлюза. Для гэтага існуе два механізмы. Абмян заместа сервера (Microsoft Entra OBO, AWS Cognito identity-pool exchange або спецыяльны STS exchange) выдае новы токен, надсыланы ў API ніжэйшага рывня, пры чым суб’ектам застаецца людзкі вызывач. Прамая перадача, прызначаная для служб ніжэйшага рывня, якія павінаваліся ў явнай даговорэ пра довер’е з шлюзам, перадае токен, які надходзіць, без змян. Саме абмян дазволяе падтвердзіць працэс перадачы, а не проста спадзявацца на гэта.
У промежутку. Токены спрацоўваюць як стан, які існуе толькі пры адзінай запытцы. Нічога не кэшуецца між запыткамі, нічога не зберагаецца ў сесіі, і жадны зменны стан не дзеліцца. Кожны вызов інструмента MCP зноў чытае токен з актуальных заголовкаў і забывае яго пасля завершэння запыткі.
Адбудова
Прыйом: выявленне дэлегаванага токена
Граніца прыйому — гэта просты мідлвэр, які запускаецца перад кожной функцыяй інструмента. У Python MCP-серверы, пабудаваны на фрэймворку у стылі FastMCP, вы выкарыстоўваеце вставку CurrentHeaders і выкарыстоўваеце невялікі інструмент, ўбачлівы токен-носіцель:
from typing import Optional
def extract_bearer_token(headers: dict) -> str:
auth = headers.get("authorization") or headers.get("Authorization")
if not auth or not auth.startswith("Bearer "):
raise AuthError("missing or malformed bearer token")
return auth[len("Bearer "):]
Далей выконвуецца парабяранне таго токена па адміністратара і аудыэнцыю, якія чакаюцца гэтай шлюзам, з выкліканымі ключамі падпісаў прадаўцы ідэнтычнасці (JWKS):
from jose import jwt
def validate_inbound_token(token: str, jwks: dict, audience: str, issuer: str) -> dict:
claims = jwt.decode(
token, jwks,
audience=audience,
issuer=issuer,
options={"require_exp": True, "require_iat": True},
)
return claims # sub, scp/scope, exp, etc.
Параболкаванне павінна выконвацца ў самым працэсе. Аўтаматызацыя параболкавання JWT у проксі, які знаходзіцца ніжэй у ланцугу, можа працаваць у сітках з мерыям довер'я, але гэта пазбавляе шлюз можлівасці прымусовага стварэння супараднасці межаў дасягненняў з інструментамі пры запуску парадных эфектаў інструмента.
Выходны працэс: ад імені шлюза
У выходным працэсе токен карыстальніка, які надаецца з усероўніка, заменяецца токенам, назначаным для аўдытарыі, якая знаходзіцца ніжэй у ланцугу. Самэ гэта замены ўражае разліку з простым перадаваннем, таму што API, якая знаходзіцца ніжэй, ніколі не бачыць токену, які надаецца з усероўніка, безпосерэдна. Шлюз выклікае канцэнтр падаўчыка ідэнтычнасці за дапамогою запіту urn:ietf:params:oauth:grant-type:jwt-bearer (Entra) або запіту assume-role-with-web-identity (AWS), перадаючы токен, які надаецца з усероўніка, як асэрцыю суб'екта. Падаўчык вяртае новы токен для API, якая знаходзіцца ніжэй, у якогу значэнне атрыбута sub застаецца тым самым первісным корыстнікам.
def exchange_obo(inbound_token: str, downstream_audience: str) -> str:
response = requests.post(
f"{IDP_TOKEN_ENDPOINT}",
data={
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
"client_id": GATEWAY_CLIENT_ID,
"client_secret": GATEWAY_CLIENT_SECRET,
"assertion": inbound_token,
"scope": f"{downstream_audience}/.default",
"requested_token_use": "on_behalf_of",
},
timeout=5,
)
response.raise_for_status()
return response.json()["access_token"]
Пасунак, які быў адменаважаны, пасля чаго прыўязуецца да выходнага HTTP-звання:
def call_downstream(downstream_token: str, path: str) -> dict:
return requests.get(
f"{DOWNSTREAM_BASE_URL}{path}",
headers={"Authorization": f"Bearer {downstream_token}"},
timeout=10,
).json()
Каратаваны дыялегаў і распространэнне ідэнтычнасці
Функцыі інструментаў адзначаюць сваія неабходныя дыялегі ў момент рэгістрацыі, а механізм контролю прыменяе іх прычымо да запуску самага коду інструмента:
@tool(required_scopes=["ticketing.write"])
def open_ticket(headers: CurrentHeaders, summary: str, body: str) -> dict:
token = extract_bearer_token(headers)
claims = validate_inbound_token(token, jwks, audience=GATEWAY_AUD, issuer=ISSUER)
enforce_scopes(claims, required=["ticketing.write"]) # central, not tool-local
downstream_token = exchange_obo(token, downstream_audience=TICKETING_AUD)
return call_downstream(downstream_token, path="/tickets")
Паколькі каратківанне дыячэння ў межах ёсць дэкларатыўным, яго можна пераглядаць. Кожны, хто аўдытуе шлюз, можа атрымаць усе інструменты і неабходныя для іх дыячэння межы проста з рэжыстры, без патрэбы чытаць код інструментаў.
Вхідныя межы ёсць аднаковымі у всіх прадаўцоў хмарных сервісаў. Разлічаецца толькі спосаб выходнай перадачы даных, а два паказаныя ніжэй адбыцця ўзаімадзеяння маюць аднаковую структуру.
У AWS: API Gateway, Lambda і Cognito
У AWS вярнучы парадок можа быць спецыяльны автарызатор Lambda ў Amazon API Gateway. Ён пераканальвае токен па адносу да пулу корыстнікаў Amazon Cognito і вяртае дакумент з правіламі плюс карточку кантэксту з распакаванымі твэрджэннямі, такім чынам сервер MCP з Lambda выбірае твэрджэння з event.requestContext.authorizer замест таго, каб пераканальваць іх знову. Для выходнага боку sts:AssumeRoleWithWebIdentity берае вярнучы токен (או токен, выданы пулам ідэнтычнасцяў Cognito) і дае тымчасовыя крантыцыяў AWS, прычысленыя да федэраванай ідэнтычнасці корыстніка. Кожны канцэнтр пункту API Gateway, які знаходзіцца пасля яго, або званічны API, які даверае JWT-токенам Cognito, тады бачыць корыстніка ў твэрджэнні sub.
Мінімальны абмян Cognito і STS у лямбаце гэйтвэю выглядае так:
import boto3
def aws_obo(inbound_token: str, role_arn: str) -> dict:
sts = boto3.client("sts")
creds = sts.assume_role_with_web_identity(
RoleArn=role_arn,
RoleSessionName="mcp-gateway-obo",
WebIdentityToken=inbound_token,
DurationSeconds=900,
)
return creds["Credentials"]
Палітры доверы для заданай ролі называе пул корыстнікаў Cognito федэрацыйным суб’ектам, а таксама пераканальваецца ў твэрджэнні aud прыходзячага токена, што значыць, што роль можа быць прызначана толькі токенам, створаным для гэтага шлюза.
У Azure: працэс Entra on-behalf-of
У Azure прыходзячыя механізмы пераканальваюцца ў прыходзячы токен на адповіднасць з рэгістрацыяй дапыткі Entra шлюза, выкарыстоўваючы URI ID дапыткі шлюза як аудыэнс. Для выходзячага крока выконваецца абмян Entra on-behalf-of, спрамованы на сэрвісную рэгістрацыю самай API, якая знаходзіцца ніжэй у ланцугу:
import msal
def entra_obo(inbound_token: str, downstream_scope: str) -> str:
app = msal.ConfidentialClientApplication(
client_id=GATEWAY_APP_ID,
client_credential=GATEWAY_CLIENT_SECRET,
authority=f"https://login.microsoftonline.com/{TENANT_ID}",
)
result = app.acquire_token_on_behalf_of(
user_assertion=inbound_token,
scopes=[downstream_scope],
)
if "access_token" not in result:
raise AuthError(result.get("error_description", "obo exchange failed"))
return result["access_token"]
API, які працуюць далей у тыяму, павінны прымаць токены, якіх аудыэнса — гэта сама рэгістрацыя прыкладнення Entra. Іх логіка автарызацыі чытае значэнні oid (ID аб’екта) або upn (імя главнага корыстніка), каб прызначыць вызов конкрэтнаму корыстніку. Фармат эгаў ідэнтычны, і змінюецца толькі спосаб з’ўязку з падаўцам ідэнтычнасці.
Связыванне з логаваннем і ацэнкай
Ідэнтычнасць, якая распространяецца, становіцься корыстной, калі яе фіксуюць. Калі шлюз логуе корыстніка праз кожны вызов інструмента, аўдыт можа прысваяць дзеянні агента конкрэтнай адзынай особе. Тое жа поле можа быць включанае ў запісы ацэнкі, што дазволяе прысваяць тэставанні адзінам людзям, чыяя дзеянні адпавядае сістэма. Ідэнтычнасць, яку выкарыстоўвае гэты патэрн, трэба вважаць першым столбцом кожнага запісу аўдыту і ацэнкі, які стварае сістэма.
Калі гэты патэрн падходзіць, а калі — ні
Ён падходзіць, калі:
- Шлюз працюе з сістэмамі, дзе індывідуальная ідэнтычнасць мае значэнне для автарызаціі, аўдыту чыста спавянання правілаў, такімі як калектываванне служб IT, кадровая справа, фінансы і рэгулююцыяяя рабочыя працэсы.
- Прадаўець ідэнтычнасці падпрыемства падтрымлівае стандарты для адміністрацыі абмяну інформацыяю: Entra OBO, Cognito з STS для веб-ідэнтычнасці, або Auth0 і Okta для абмяну токенамі.
- API-і, якія працуюць пасля шлюза, знаходзяцца ў той жа межах довер’я, што і шлюз, і іх можна налаштавіць так, каб яны прымалі токены аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытарнай аўдытар
- Доверлівы проксі на выходзе ужо рэалізуе цэлыя правіла дэлегавання для шлюза, чыяго ўласная праца стае зайвай. У такім случае шлюз стварае толькі вхідныя межы, а таксама варыант дэлегавання доверы для выходнага боку, перадаючы даныя безпосерэднья пад часе явнага даговору пра доверу і прыймаючы, што проксі ёсць справжнейя межа безпекі.
- API на выходзе адмовляецца прыймаць токены корыстніка, і ўсунуць гэта не ў магчымасцях. Паставіце гэты падход на пазнейшы час, калі сітуацыя змяніцца. Вернуцца да вікорыстання прынцыпала службы „наразе“ павінна быць свядомым рашэннем, пры чым рызыкі трэба зафіксаваць, а не ўжыць як стандарт.
Эксплуатацыйныя аспекты:
- Задзейнаванне. Кожны абмен токенамі праз OBO коштае дадзеўнага выезду да тэндпоінта токена для кожнага вызову з ніжней ступені. Зберагаюце абмёнаваныя токены так дзеўна, як токен, які прыходзіць, застаецца чынным, па ключу
(sub, downstream_audience), і ніколі не пераводзіце іх між пользоватэлямі. - Рэгулюванне ад выдавача ідэнтычнасці. Квоты тэндпоінта токена не ўсё такі простыя. Забезпечыце запас магчымасцей і сачыце за ступенем абмёнавальных бядаў.
- Аднавленне. Дзяржаць длігія сесіі агента магчыма дольш чым трымкі паводлівання адзінаго токена. Планаваце ротацыю токена аднавлення, алеўжо можна таксама прыйняць, што цыкл агента заканчываецца, калі яго токен выгорае, што часта і ёсць правільным падходам да безпекі.
- Альтэрнатыва у вачынку сэрвіснага акаунта. Зберагаюце шлях абмену сэрвіснага акаунта для справ, якія сапраўды не выкарыстоўваюць карыстальнікаў, такіх як перагляд стану або запланаваная фонавая сінхронізацыя. Ён павінен быць чыткі, з вузкім дыячым спектрам і з логамі.
Дзе шаблон не падае ў прыемныя параметры
У ём усунута прыпуск, што прадаўцы аідэнтычнасці падтрымліваюць стандарт на-імя абмяну, а багатыя старэйшыя з іх гэтага не падтрымліваюць. У такіх супакоўках сторона, якая выдае даныя, пераходзіць на прымітны спосаб — прасылка токенаў без перэробкі, пры чым праймае пісьмовае сагласаванне пра доверлівасць з кожным службам, якая прымае даныя. Гэта прыемна для бэкендов, якія знаходзяцься ў межах доверлівасці гэтага шлюза, але недастатнja, калі службу прымае іншая каманда або сторонні прадаўца. Правільны шлях міграцыі — апградацыя прадаўцы аідэнтычнасці, а не постаціонарнае выкарыстоўвання спосабу перасылкі даных.
Ён таксама прыяжджае, што службы на выходзе прымаемы токены корыстніка-аудыэнцыі. Большынства корпаратыўных сістэм былі створаны раней, чым з’явілася дэлегаваная автарызацыя, і яны аўтэнтыфікуюцься толькі на адпаведнасць прынцыпалаў службы. У такім случае неабходна чакаць, пакуль служба будзе апдэйтавана або перад яю будзе уведзены проксі, які ведае аб ідэнтыцэты. Частыя запускі, калі дзеякія вызовы атрыбутаваны корыстніку, а іншыя — службе, ёсць нормальным станам пад час міграцыі, але іх трэба расследаваць як тэхнічны дывэт з датай завершэння, а не нормалізаваць.
У падзеце, гэта не рашыяя прыбліжэнне павінульнасці агента як дзеяча. Зберэнне ідэнтыфікатора чалавека праз усі ўзлёты ў мэшыне — гэта правыльны асновны спосаб контролю, пры тым агент на адной базе большых моваў можа быць практычна прагнуты да выканання дзеянняў, якія корыстувач ніколі не прасіў буквальна. Гэты патэрн гарантуюць атрыбуцыю, а не намер. Контрольныя меры, якія компенсуюць гэтыя рызыкі, маюць важлівую ролю: парадзеўка чалавека для дзеянняў з вялікім уплывам, мінімальны дыяпазон дзеянняў на входзе і логаванне доказаў па кожнам вызове.
Спіс перакананняў для адыябраўання
- Документавацыя вхіднага кантракту (выдавач, аудыянце, падтрымваныя дыяпазоны) як версіяванага інтэрфейса і кераванне ім як публічным API.
- Рэалізацыя супараднавання дыяпазонаў з інструментамі як дэкларатыўнага поля пад час рэгістраціі інструменту, а не як спецыяльных перакананняў, распаўзлых у тэле інструмента.
sub, ўпрынцыпе, каб можна было аўдытаваць усю процэсуру абмянку з самага пачатку да канца.Калі амерыканскія падпрыемства і федэральныя прыграмы застаўляюць Фрэймворк управління рызыкамі AI NIST, яго функцыя Govern выказвае патрабаванне да індывідуальной адпаведнасці, каб яна застаўалася пасля автаматызаваных дзеянняў на рэгулююцыхся сістэмах. Заканчэнне ідэнтыфікаціі на роўні входу працоўвае працоўна проты гэтага і спрыяе выяўленню прычын пад час аўдыту ў срэдах SOX, HIPAA і FedRAMP, дзе кожная автаматызаваная змяна стану павінна быць прыязначаная конкрэтнаму чалавеку.
Да далейшага чытання
Фундаментамі являюцца RFC 6749 (Фрэймворк автарызацыі OAuth 2.0) і RFC 8693 (Абмянка токенаў OAuth 2.0) ад IETF. Дакументацыя вэндораў раскрывае механізм OAuth 2.0 On-Behalf-Of у платформе ідэнтыфікаціі Microsoft, дапамогу API AWS STS AssumeRoleWithWebIdentity і пулі ідэнтыфікаціі Amazon Cognito. NIST публікуе Фрэймворк управління рызыкамі AI (AI RMF 1.0), а спецыфікацыя MCP таксама містыць раздзіл пра автарызацыю, які варта прачытаць разам з усім вышэсказаным.
Супаўязаныя матэрыялы
- Серверы MCP стаюць платформамі можлівасцяў, а не простаўкамі для інструментаў — трансформацыя інструментаў, пошук, прасторы імен, відавальнасць, проксі, навыкі, задачы, версіяванне і тэставанне: шаблоны, якія ператвараюць сервер MCP у керавануючую платформу можлівасцяў.
- MCP і OAuth2: Хто автарызаваў дзеянне агента? — чаму OAuth2 пакрывае толькі частку автарызаціі агента пад MCP, і як OIDC, дыяпазоны, правіла confused-deputy, GNAP і можлівасціі взаімаўзаімаюцца.