Notakey seadet kirjeldatakse tavaliselt autentimisserverina: toimub
sisselogimine, telefonile saabub kinnituspäring, kasutaja kinnitab. Kuid
sama edastuskanal võtab vastu ka teist tüüpi sõnumi, lihtsa teavituse,
ja see teeb seadmest midagi üldisemat: tõukemärguannete (push) kanali
igasse teie teenusesse registreeritud telefoni, välja kutsutav igast
skriptist üheainsa curl-käsuga.
any script ──HTTPS──▶ appliance API ──push──▶ enrolled phone
(cron, monitoring, /notify Notakey Authenticator
home automation…)
Erinevalt autentimispäringust ei küsi teavitus kinnitust: see lihtsalt ilmub telefoni, adresseerituna kasutajanimele, ja jõuab korraga kõikidesse kasutaja registreeritud seadmetesse. Nii sobib see otse asendama kohti, kuhu muidu ühendaksite SMS-i (iga sõnum maksab, saatjat saab võltsida) või e-posti (jääb esmaspäevani lugemata): tööde seire, valves oleva inseneri teavitamine, teadaanded töötajatele.
Eeldused
- Töötav Notakey seade (pilves või teie oma taristus), milles on teenus ja vähemalt üks kasutaja, kelle telefon on liidestatud. Kui kasutate juba VPN-i 2FA-d või SSO-d, on kõik see olemas: teavitused liiguvad läbi sama teenuse, mida kasutavad teie sisselogimised, või eraldi teenuse kaudu, kui soovite teistsugust kujundust.
- API sisselogimisandmed (kliendi ID ja kliendisaladus), mis luuakse haldusliideses jaotises Access credentials (vt 1. samm allpool).
curljajqükskõik millises masinas, mis seadmeni ulatub. Sellega on sõltuvuste nimekiri ammendatud.
1. samm – looge API sisselogimisandmed
Avage haldusliideses Access credentials ja looge oma skriptide jaoks sisselogimisandmed. Kaks asja on siin olulised:
- Õiguste ulatus (scope). Andke õigus
urn:notakey:notify. See ongi ulatus, mida see juhend vajab. Olemas on kaurn:notakey:auth, mis on mõeldud autentimispäringute (kinnita/keeldu) loomiseks; lisage see ainult siis, kui samade sisselogimisandmetega tehakse mõlemat. Ainult teavitusõigusega sisselogimisandmeid ei saa kuritarvitada sisselogimiskinnituste vallandamiseks, seega hoidke õiguste nimekiri nii lühike, kui töö vähegi lubab. - Saate kliendi ID ja kliendisaladuse. Saladus annab õiguse saata sõnumeid kõigile teenuse kasutajatele, seega käsitlege seda nagu juurkasutaja parooli.
2. samm – vahetage see tokeni vastu ja hoidke tokenit värskena
Teavituskutse ise kliendisaladust ei kasuta. See kasutab pääsutõendit (token), mis hangitakse standardse OAuth 2.0 client credentials meetodiga. Tokenid on teadlikult lühikese elueaga: plaanige uuendamist umbes kord tunnis, muidu hakkavad teie skriptid mingil hetkel autoriseerimisvigadega ebaõnnestuma, pärast seda, kui need on 59 minutit laitmatult töötanud.
Seega on tokeni uuendamine cron-i töö, mitte ühekordne seadistussamm:
#!/bin/bash
# /usr/local/bin/ntk-token-renew — cron: 0 * * * *
curl -s -X POST https://ntk.example.com/api/token \
-d 'grant_type=client_credentials&client_id=<client-id>&client_secret=<client-secret>&scope=urn:notakey:notify' \
| jq -r .access_token > /etc/notakey/api.token
Skript sisaldab kliendisaladust ja kirjutab tokeni faili, seega piirake ligipääs mõlemale:
chmod 700 /usr/local/bin/ntk-token-renew # root-only, holds the secret
install -m 600 /dev/null /etc/notakey/api.token
Kui andsite ka õiguse urn:notakey:auth, küsige see eraldi tokenina
eraldi faili (sama kutse, scope=urn:notakey:auth), mitte ühe mõlemat
ulatust hõlmava tokenina; nii ei ole teavitusskriptide käes kunagi
tokenit, millega saaks luua sisselogimiskinnitusi.
3. samm – üks korduvkasutatav teavitusskript
Kõik ülejäänu selles juhendis kutsub välja sedasama skripti. See võtab argumentideks kasutajanime, pealkirja ja sõnumi sisu:
#!/bin/bash
# /usr/local/bin/ntk-notify <username> <title> <description>
token=$(cat /etc/notakey/api.token)
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $token" \
-d '{ "username": "'"$1"'", "title": "'"$2"'", "description": "'"$3"'", "type": "notification" }' \
"https://ntk.example.com/api/v3/services/<service-id>/notify"
Asendage ntk.example.com oma seadme aadressiga ja <service-id>
haldusliideses näidatud teenuse UUID-ga. Proovige järele:
ntk-notify j.doe "Test" "If you can read this on your phone, the channel works."
Tõukemärguanne saabub Notakey Authenticatori rakendusse, samasse rakendusse, mis kasutajal on sisselogimiste jaoks juba olemas, nii et pole midagi uut paigaldada, selgitada ega mobiilseadmete halduses kooskõlastada.
4. samm – kutsuge seda välja kust tahes
Kui kanal mahub ühte ritta, hakkab see kasutusjuhte külge tõmbama. Mõned, mis juba täna töökeskkonnas jooksevad:
Varukoopiatöö, mis endast teada annab. Klassikaline vaikne tõrge: varundus, mis lakkas töötamast kuude eest, ilma et keegi oleks märganud. Kaks rida töö lõpus lahendavad selle:
if ! /usr/local/bin/backup-run; then
ntk-notify admin "Backup FAILED" "Nightly backup on $(hostname) exited with an error — check /var/log/backup.log"
fi
Kettaruum, sertifikaadi aegumine, ükskõik mis, mida cron kontrollida oskab:
#!/bin/bash
# cron: 0 8 * * *
used=$(df --output=pcent / | tail -1 | tr -dc '0-9')
if [ "$used" -gt 90 ]; then
ntk-notify admin "Disk warning" "Root filesystem on $(hostname) is at ${used}% — time to clean up."
fi
Teadaanne kõigile töötajatele. API adresseerib ühe kutsega ühe kasutajanime, nii et üleettevõtteline sõnum on tsükkel üle kasutajate nimekirja (hooldusaknad, kontori sulgemised, intsidenditeated):
while read -r user; do
ntk-notify "$user" "IT maintenance" "VPN unavailable Saturday 06:00–08:00 — planned appliance upgrade."
done < users.txt
Elektri börsihinnad, kaks hinda iga kahe tunni tagant. Kõik, mida tasub telefoni saata, pole rike. See skript jookseb cron-ist ja ütleb kasutajale, mis järgmine tund elektrit maksma hakkab, mugav, kui otsustate, millal nõudepesumasin käima panna:
#!/bin/bash
# cron: 5 * * * * — sends on even hours, 06–23 only
hour=$(( $(date +%H) + 1 ))
next=$(( hour + 1 ))
if [ "$hour" -gt 5 ] && [ "$hour" -lt 24 ] && (( $(date +%H) % 2 == 0 )); then
ntk-notify "$1" "Electricity" \
"Next hour: $(spot_price "$hour")€/kWh. After that: $(spot_price "$next")€/kWh."
fi
(spot_price on ükskõik milline käsk, mis teie turuandmed pärib: börsi
API, puhverdatud CSV-fail. Mõte on kohaletoimetamises, mitte allikas.)
Selliste korduvate sõnumite puhul tasub teada kahte dokumenteeritud
lisavõimalust: kui lisate saadetavatele andmetele välja fingerprint, siis
sama väärtusega korduv saatmine uuendab olemasolevat sõnumit, selle
asemel et uut virna lisada, nii jääb hinnateavitus üheks märguandeks,
mitte neljakümneks päevas. Ja "type": "sms" saadab sama sõnumi hoopis
SMS-ina, kui kasutajal on mobiilinumber määratud: varukanal juhuks, kui
kellegi telefonist on rakendus kadunud.
Pesumasin sai valmis. Voolutarvet jälgiv nutipistik, Home Assistanti automaatika, arvestit pärivi skript – ükskõik mis tsükli lõpu tuvastab, teavitus on ikka seesama üks rida. Naljakas näide, aga päris harjumus: kui tõukemärguande saatmine ei maksa midagi, hakkate teavitama kõigest.
Milleks see kanal sobib (ja milleks mitte)
SMS-iga võrreldes on vastuvõtja pool palju tugevam: SMS jõuab suvalisse telefoni, kus SIM-kaart parasjagu asub, ja saatja nime saab igaüks võltsida; Notakey teavitus aga jõuab ainult Authenticatori rakendusse seadmetes, mis on teie teenuses läbinud krüptograafilise registreerimise. Keegi ei saa end ise teie teavituste saajaks lisada ega saatjana esineda.
Üks aus piirang otse API dokumentatsioonist:
teavituse sisu ise ei ole otspunktkrüpteeritud: nagu iga mobiilne
tõukemärguanne, liigub see läbi Apple’i ja Google’i tõukemärguandeteenuste
ning on loetav rakendustele, millel on seadmes ligipääs märguannetele.
Käsitlege sõnumi sisu seega nagu piipariteadet, mitte nagu pitseeritud
ümbrikku: „varundus ebaõnnestus hostis X“ sobib, parool või API võti mitte.
Kui vaja on edastada midagi tõeliselt salajast, kasutage hoopis
autentimispäringut (urn:notakey:auth). Seal on tõukemärguanne vaid
koputus uksele ning sisu laadib rakendus pärast kasutaja vastust alla oma
sertifikaadiga autenditud kanali kaudu.
Kuhu see sobitub
Kui seade kaitseb juba teie VPN-i või rakendusi, on teavitused tasuta võimekus, mida te veel ei kasuta: sama teenus, sama rakendus, samad API sisselogimisandmed, üksainus lisanduv otspunkt. Ja kui olete seni maksnud SMS-lüüsile ettevõttesiseste hoiatuste eest, asendab see selle iga saaja jaoks, kelle taskus on registreeritud telefon.
Seotud juhendid
- VPN-i 2FA RADIUS-ega – täielik autentimisproksi seadistus: sama seadme autentimispool
- Linuxi SSH 2FA pam_radius-ega: telefonikinnitused serveritele, kus teie skriptid jooksevad
- API dokumentatsioon: kogu REST-liides, sealhulgas seadmepäringud ja autentimispäringud