Головна/Рецепти (Cookbook)/Поділіться org-credential ENУКРРУС API-довідник (ReDoc) ↗

Поділіться org-credential

Менеджер зберігає один ключ на всю організацію; звичайному учаснику відмовлено, але статус він бачить.

Один вендорський ключ на всю команду: збережений один раз менеджером організації, відданий resolve-ом кожному учаснику, невидимий як запис для не-менеджерів.

Мета

Як менеджер організації — зберегти default-credential організації; як звичайний учасник — отримати 403 на інвентарі, але правдивий credential-status.

Дійові особи

Актор Сира роль в org Може
Ольга admin (менеджерська роль) читати й писати /v1/org-credentials
Марко member ні те, ні інше — але credential-status працює

Обидва токени мусять нести той самий org_id (User Plane Tokens).

Кроки

1. Ольга зберігає спільний ключ

Викличте POST /v1/org-credentials — та сама форма тіла, що й у персональному create; власник береться з org_id токена:

curl -s -X POST "$CREDS_BASE/v1/org-credentials" \
  -H "Authorization: Bearer $OLHA_TOKEN" -H "Content-Type: application/json" \
  -d '{
    "provider_code": "'$CODE'",
    "name": "Team key",
    "credentials": {"api_key": "sk-org-0123456789abcdef"},
    "make_default": true
  }'

Очікуване 201: owner_type: "organization", owner_id = UUID організації, is_default: true, маска замість секрету.

2. Ольга бачить його в інвентарі організації

GET /v1/org-credentials → очікуване 200 із записом. Менеджер іншої організації побачив би порожній список — ізоляція за owner_id.

3. Маркові в інвентарі відмовлено

Той самий list-виклик із токеном Марка:

curl -s "$CREDS_BASE/v1/org-credentials" -H "Authorization: Bearer $MARKO_TOKEN"

Очікуване 403 FORBIDDENmember не в менеджерському списку (JWT_ORG_MANAGER_ROLES). Читання ґейтяться точно так само, як записи: інвентар секретів організації — справа менеджерів.

4. Марко все одно дізнається те, що йому треба

Марко викликає credential-status для провайдера. Очікуване 200 з "organization_credentials_configured": true і — якщо в Марка немає персонального ключа — "effective_credential_source": "organization": його переклади працюватимуть на командному ключі, який він не може інспектувати.

Перевірено тестом test_s05_share_an_org_credential.