Pāriet uz dokumentāciju
API

Tvērumi

Ko atslēgai ir atļauts darīt.

Vārdnīca

Slēgta kopa formā resource:action. Pietiekami maza, lai to rādītu cilvēkam kā izvēles rūtiņu sarakstu, un pietiekami stabila, lai saglabāts piešķīrums nozīmētu to pašu arī gadu vēlāk. Tajā pašā vārdnīcā ir rakstīta darbvietas LOMA un tā pati ierobežo MCP rīkus, tāpēc tikai lasīšanas klients pat neredz sūtīšanas rīku. Viens alfabēts, trīs virsmas.

TvērumsPiešķir
emails:sendSūtīt e-pastu
emails:readLasīt nosūtītos ziņojumus un to piegādes statusu
drafts:readLasīt melnrakstus
drafts:writeVeidot un rediģēt melnrakstus
threads:readLasīt pavedienus un ziņojumus
threads:writeMarķēt, lasīt un arhivēt pavedienus
labels:readLasīt etiķetes
labels:writeVeidot un rediģēt etiķetes
contacts:readLasīt kontaktus
contacts:writePievienot, rediģēt un noņemt kontaktus
audiences:readLasīt auditorijas un to sastāvu
audiences:writeVeidot un rediģēt auditorijas un mainīt to sastāvu
calendar:readLasīt kalendāra notikumus un ielūgumus
calendar:writeVeidot, mainīt kalendāra notikumus un atbildēt uz tiem
templates:readLasīt e-pasta veidnes un tās priekšskatīt
templates:writeVeidot, rediģēt e-pasta veidnes un sūtīt ar tām
domains:readLasīt domēnus un to DNS statusu
domains:writeVerificēt un konfigurēt domēnus
webhooks:readLasīt webhook galapunktus un piegādes
webhooks:writeVeidot, rediģēt un testēt webhook
rules:readLasīt pasta noteikumus un tos testēt
rules:writeVeidot, rediģēt un pārkārtot pasta noteikumus
connections:readLasīt, kuras pastkastes ir pievienotas
members:readRedzēt, kas ir darbvietā un kādas tiesības tiem ir
members:writePievienot un noņemt cilvēkus un mainīt, kam tie var piekļūt
roles:readLasīt lomas, ko definē šī darbvieta
roles:writeVeidot, rediģēt un dzēst lomas
settings:readLasīt pastkastes iestatījumus, tostarp parakstu
settings:writeMainīt pastkastes iestatījumus un parakstu
keys:writeNomainīt savu noslēpumu, nevienam neatverot konsoli

Atslēga, kas izveidota bez apdomāta tvērumu saraksta, saņem emails:send un neko citu. Drošais noklusējums akreditācijas datiem ir šaurākais, kas tos padara noderīgus.

Atslēgu ierobežo loma aiz tās

Atslēgu var izdot pret LOMU, un loma ir griesti, nevis otrs piešķīrums. Ko atslēga patiesībā drīkst darīt, ir tās pašas tvērumu ŠĶĒLUMS ar šīs lomas atļaujām (key.scopes ∩ role.permissions), aprēķināts vienreiz uz robežas, katram pieprasījumam, pirms tiek sasniegts kāds galapunkts. Nekas tālāk lejup nezina, ka lomas vispār pastāv: tvērums, kura lomai nav, vienkārši nav sarakstā, ko lasa tvērumu pārbaudes.

Tātad abi saraksti tiek lasīti kopā, un neviens pats par sevi neuzvar. Atslēga ar emails:send zem lomas, kurai tā nav, sūtīt nedrīkst; loma ar emails:send neko nedod atslēgai, kas to nekad nav prasījusi. Atzīmēt tvērumu nozīmē lūgt pilnvaras, un loma izlemj, cik daudz no prasītā jūs saņemat.

Atslēgai BEZ lomas nav griestu, un tāpēc tā ir tik plaša, cik plaša ir darbvieta, pret kuru tā izdota. Tieši tāda ir katra atslēga, kas izveidota pirms lomu ieviešanas, un tādu joprojām iegūst īpašnieks, kas šo lauku neaiztiek, tāpēc tukša loma ir PLAŠĀKAIS stāvoklis, kādā atslēga var būt, nevis šaurākais. Tāpēc arī, dzēšot lomu, jums jāpasaka, kurp lai dodas tās atslēgas: atstāt tās bez lomas klusi paaugstinātu katru no tām.

Šķēlums tiek aprēķināts katram pieprasījumam, nevis iespiests atslēgā izdošanas brīdī. Tāpēc lomas sašaurināšana ir dzīva atsaukšana, kas ir spēkā jau izsaucēja nākamajā izsaukumā, atslēgu nemaz nerotējot, un paplašināšana darbojas tieši tāpat — un tieši šo pusi ir vērts paturēt prātā.

GET /ping un GET /keys/self ziņo scopes līdzās grantedScopes un roleId vienas konkrētas kļūmes dēļ. scopes ir faktiskais saraksts un vienīgais, kas kaut ko autorizē; grantedScopes ir tas, ar ko atslēga tika izdota. Viss, kas ir otrajā un trūkst pirmajā, ir atņemts ar lomu, un šī starpība ir pilnīga atbilde uz jautājumu „manai atslēgai ir emails:send, un es saņemu insufficient_scope“. Risinājums ir lomas maiņa, nevis vēl viena atslēga.

Atslēga, ko loma ir sašaurinājusi
curl "$OE/ping" -H "$AUTH" {  "ok": true,  "keyId": "4c1b257a66287fd113bd89d0",  "mode": "live",  "scopes": ["emails:read", "threads:read"],  "roleId": "role_c40a95f21cc65d31c2a89e07",  "grantedScopes": ["emails:send", "emails:read", "threads:read"],  "workspaceId": "10417196-e324-4283-af98-66ec62167c47"}

Piecas atļaujas nekad nevar nonākt uz atslēgas: api-keys:read, api-keys:write, billing:read, billing:write un workspace:manage. Tās ir atļaujas, bet nav tvērumi, tāpēc neviena loma, lai cik dāsna, nevar tās uzlikt marķierim: izdot vēl vienu atslēgu, mainīt, ko drīkst cita atslēga, vai mainīt plānu var tikai pieteicies cilvēks. Vienīgais, ko atslēga drīkst darīt pati ar sevi, ir nomainīt savu noslēpumu, un tas ir aiz keys:write tvēruma. GET /roles/permissions šīm piecām norāda scope: false, un tieši tas ļauj vienam komponentam attēlot gan lomu matricu, gan atslēgas izveides izvēles rūtiņu sarakstu.

roles:write faktiski ir visa vārdnīca, un izlikties citādi būtu bīstamāka dokumentācija. Atslēga, kurai tā ir, var ar PATCH mainīt pašu lomu, kas to ierobežo, un iedot sev visu pārējo, un, tā kā griesti tiek aprēķināti katram pieprasījumam, plašākie stājas spēkā jau nākamajā izsaukumā. Tas nav caurums, ko aizlāpīt, jo lomu redaktors, kas nevar rediģēt lomas, nav lomu redaktors. Tas ir iemesls nelikt roles:write uz atslēgas, kurai vajadzēja tikai lasīt dalībnieku sarakstu.

Sūtīšanas tvērums

Atsevišķi no tvērumiem atslēgu var sašaurināt arī tajā, kā vārdā tā drīkst sūtīt. Tā nes divus sarakstus. domainAllowlist satur veselus domēnus, un atslēga, kurai ir domēns, drīkst sūtīt no jebkuras adreses uz tā, arī no adresēm, kas izveidotas pēc atslēgas. addressAllowlist satur atsevišķas adreses. Atstājiet abus tukšus, un atslēga ir tikpat plaša kā darbvieta, nekad plašāka. GET /keys/self rāda abus sarakstus, un GET /addresses ziņo, ko konkrētā atslēga patiešām drīkst lietot, kas ir atbilde uz neizskaidrojamu from_address_forbidden.

Tā pati kopa sašaurina to, ko atslēga lasa. Nosūtītais pasts, izsekošana un kalendārs atbild tikai par adresēm, kuru vārdā atslēga drīkst sūtīt, tāpēc atslēga, kas ierobežota ar vienu domēnu, cita domēna vārdā ne sūta, ne lasa. Vesels domēns turklāt ļauj atslēgai iestatīt šī domēna izsekošanas resursdatoru, ko atslēga, kas ierobežota ar atsevišķām adresēm, nevar.

Tātad ir trīs sašaurinājumi, un tie savienojas, nevis viens otru pārraksta: atslēgas tvērumi, virs tās esošās lomas atļaujas un domēni un adreses, ko tā drīkst likt From galvenē. Sūtīšanai vajadzīgi visi trīs, un atteikums nosauc tikai to pirmo, pret kuru tas atdūrās.