Ajastettu työ vai ihmisen kirjautuminen: minkä identiteetin API:n pitäisi nähdä?
Cron-työ ja kirjautumiskehotteella oleva ihminen ovat eri subjekteja. Vertaa verkkopolkua, sovelluksen identiteettiä ja delegointia ennen automatisointia.
Ajastettu työ ja kirjautumiskehotteella seisova ihminen kutsuvat samaa API:a eri tunnuksilla, eri elinikillä ja eri omistajilla. Työ tarvitsee verkkopolun, sovelluksen identiteetin ja käyttöoikeusjoukon; ihminen tarvitsee kirjautumisen, toisen tekijän ja istunnon. Näiden sekoittaminen tuottaa automaation, joka hajoaa aina, kun ihmisen salasana vaihtuu, tai monivaiheisen toimintatavan, jota on heikennetty juuri sen verran, että cron-työ pysyy hengissä.
Kolme porttia, jotka näyttävät yhdeltä
Lähdeosoitesääntö kysyy, mistä pyyntö tuli. Todennus kysyy, kuka soittaa ja mitkä todisteet esitettiin. Valtuutus kysyy, saako tämä subjekti suorittaa tämän toiminnon. VPN muuttaa vain ensimmäistä kolmesta, ja se muuttaa sitä isännän jokaiselle prosessille eikä vain työlle, joten pidä kolme havaintoa erillään tapahtumaraportissa.
Siksi poistumissolmun vaihtaminen voi korjata lähdeosoitteen vuoksi tulleen hylkäyksen ja jättää virheellisen tokenin koskemattomaksi. Siksi myös kelvollinen API-token ei tee yksityisestä päätepisteestä tavoitettavaa työstä, jolla ei ole sinne reittiä.
Interaktiivinen polku on huono automaation malli
Ihmisen kirjautumisen skriptaaminen on houkuttelevaa, koska se toimii kerran. Skripti tallentaa salasanan, kenties kertakäyttöisen salasanan siemenen, ja riippuu sitten haasteesta, joka on suunniteltu vaatimaan ihminen. OAuthin nykyinen paras turvakäytäntö, RFC 9700, kieltää resource-owner-password-credentials-määrityksen ja selittää, miksi se sopii huonosti kaksivaiheiseen ja monivaiheiseen todennukseen.
Tuettu vaihtoehto on yleensä luottamuksellisen asiakkaan kulku, jossa valtuutuspalvelin todentaa sovelluksen ja myöntää tokenin. RFC 6749:n kohdan 4.4 client-credentials-määritys on yksi esimerkki. Sen olemassaolo ei tarkoita, että jokainen API hyväksyy sen, eikä sitä, että käyttäjän delegoima tehtävä voitaisiin korvata sillä, koska ne ovat palvelun omistajan kysymyksiä. Kysy, mitä valvomatonta mallia palvelu tukee, ennen kuin kirjoitat koodia.
Mihin VPN yhä kuuluu
VPN voi tarjota verkkopolun, jota yksityinen API vaatii, ja se on laillinen rooli. Se ei todenna työtä sovellukselle eikä rajaa, mitä työ saa tehdä. Jaettu lähtöosoite tunnistaa myös isännän eikä työtä, joten sallittujen luetteloon merkitty kyseinen osoite päästää läpi jokaisen prosessin, joka sillä toimii.
Jos työ toimii jaetulla ajurilla, tämä ero on pikemminkin tärkeämpi kuin vähemmän tärkeä. Toinen työnkulku samalla isännällä perii reitin ja osoitteen, eikä API voi erottaa niitä toisistaan. Se on sama heikkous kuin jaettu salasana, yhtä kerrosta alemmas siirrettynä. Aseta rajoitus sinne, missä sovellus voi sen valvoa, ja eristä ajuri, jos et voi rajata sallittujen luetteloa tiukemmin.
Vertaa kahta mallia rehellisesti
Ihmisen kirjautuminen antaa sinulle todellisen ihmisen, todellisen toisen tekijän ja auditointikelpoisen istunnon, eikä se voi toimia valvomatta. Sovelluksen identiteetti antaa sinulle valvomattoman suorituksen, tarkistettavan laajuuden ja tunnuksen, jonka voit kierrättää, eikä se voi toimia käyttäjän puolesta, joka ei ole delegoinut mitään. Kumpikaan ei ole toisen heikompi versio; ne vastaavat eri kysymyksiin. Valitse kysymällä, täytyykö tehtävän toimia ilman ketään paikalla ja täytyykö toiminto kohdistaa tietylle käyttäjälle.
Jos molemmat vastaukset ovat kyllä, malli tarvitsee delegoinnin mallin eikä lainattua salasanaa. Kirjoita päätös muistiin sinne, mistä seuraava ylläpitäjä löytää sen.
Mitä on tarkistettava ennen luovutusta
Suorita yksi sallittu toiminto ja yksi vaadittu hylkäys todellisesta työntekijästä ja säilytä molemmat tulokset. Testaa sitten vanhentunut tunnus ja käyttäytyminen, kun verkkopolku ei ole käytettävissä, koska ne ovat ne kaksi vikaa, jotka herättävät jonkun yöllä.
curl -sS -o /dev/null -w '%{http_code}\n' \
-H "Authorization: Bearer TOKEN" https://api.example.com/v1/records
Kirjaa subjekti, laajuus, kierrätyksen omistaja ja suoritusympäristö kyseisen tuloksen viereen. Juuri se kirjaus tekee seuraavasta kierrätyksestä rutiinia eikä tapahtumaa. Se on myös se osa, jota auditoija kysyy.