Praleisti ir pereiti prie pagrindinio turinio

Status List atšaukimas paaiškintas

Tikrintojui, ką tik gavusiam kredencialą, reikia žinoti, ar išdavėjas vis dar jį pripažįsta. Token Status List į tai atsako be tikrintojo kreipimosi į išdavėją dėl konkretaus kredencialo: kredenciale esantis status reikalavimas nurodo kompaktišką sąrašą, o vienas to sąrašo bitas perteikia atsakymą.

Kredenciale esantis status reikalavimas

Išdavėjas, palaikantis Token Status List, išdavimo metu prie kredencialo prideda status reikalavimą. Jį sudaro du dalykai: idx, indeksas, priklausantis šiam kredencialui sąraše, ir uri, adresas, kuriuo pasiekiamas jį saugantis Status List Token. Daugiau apie kredencialą niekas nesikeičia; reikalavimas yra tiesiog rodyklė.

Išdavėjas

Priskiria kredencialui indeksą ir įterpia status reikalavimą

Reikalavimas pridedamas vieną kartą, išdavimo metu, ir per visą kredencialo galiojimo laiką nesikeičia

Status reikalavimas (kredenciale)

{
  "status": {
    "status_list": {
      "idx": 4271,
      "uri": "https://issuer.example/statuslists/employment-2026-q3"
    }
  }
}

Status List Token atsisiuntimas

Pateikimo metu tikrintojas atsisiunčia uri iš status reikalavimo. Atsakymas yra pasirašytas Status List Token: JWT su typ antrašte statuslist+jwt (arba lygiavertis CWT), pateikiamas kaip application/statuslist+jwt. Jo turinyje yra suglaudinta bitų eilutė ir paprastai ttl, nurodantis, kiek laiko tikrintojas gali saugoti rezultatą podėlyje, kol jį reikia atsisiųsti iš naujo.

Tikrintojas

Iš ką tik pateikto kredencialo status reikalavimo nuskaito idx ir uri

GET uri

Gauna Status List Token ir jį talpina podėlyje iki ttl sekundžių

Status List Token turinys (atsakymas)

{
  "sub": "https://issuer.example/statuslists/employment-2026-q3",
  "iat": 1789200000,
  "exp": 1789804800,
  "ttl": 43200,
  "status_list": {
    "bits": 2,
    "lst": "eNrbuRgAAhcBXQ"
  }
}

sub pakartoja paties sąrašo URI, kad tikrintojas galėtų patvirtinti, jog atsisiuntė tinkamą token. iat ir exp riboja paties token galiojimą. ttl, sekundėmis, yra maksimalus laikas, per kurį tikrintojas gali naudoti podėlyje saugomą kopiją, kol vėl turi atsisiųsti sąrašą.

Bito iššifravimas

lst yra baitų masyvas, užkoduotas base64url formatu ir suglaudintas DEFLATE metodu, naudojant zlib duomenų formatą; tikrintojas pirmiausia jį išglaudina. bits nurodo, kiek bitų sąraše užima kiekvienas kredencialas: 1, 2, 4 arba 8. Kai bits: 2, kredencialas, kurio numeris idx, yra baite idx * 2 / 8, ir tikrintojas perskaito du bitus tame poslinkyje, kad gautų statuso reikšmę.

Praktinis pavyzdys: idx 4271, bits: 2

  • bit_offset = idx * bits = 4271 * 2 = 8542
  • byte_index = bit_offset / 8 = 1067
  • bit_in_byte = bit_offset % 8 = 6

Tikrintojas perskaito išglaudinto masyvo 1067 baitą, iš jo išgauna du bitus, prasidedančius nuo 6 bito, ir gautą rezultatą palygina su toliau pateikta reikšmių lentele.

ReikšmėPrasmė
0x00VALID
0x01INVALID
0x02SUSPENDED
0x03, 0x0C-0x0FTaikomajai programai skirta / rezervuota reikšmė

Nurodytos reikšmės pateiktos darant prielaidą, kad bits: 2. Kai bits: 1, tinka tik VALID (0) ir INVALID (1); kai bits: 4 ir bits: 8, lieka daugiau vietos taikomosios programos specifinėms reikšmėms.

Kodėl sąrašas išlieka nedidelis

Realiuose status sąrašuose vyrauja nuliai, nes dauguma išdavėjo kada nors išduotų kredencialų vis dar galioja, o vienodų bitų seka gerai suglaudinama. DEFLATE suglaudinimas taikomas neapdorotai bitų eilutei ir būtent dėl to sąrašas, apimantis šimtus tūkstančių kredencialų, tinkle užima vos kelis kilobaitus, todėl viso sąrašo atsisiuntimas, o ne klausimas išdavėjui apie vieną kredencialą, tampa praktiškas sprendimas.

Agregavimas: išankstinis sąrašų atradimas

Išdavėjas gali neprivalomai prie Status List objekto pridėti aggregation_uri, nurodantį galutinį tašką, kuriame išvardyti visų jo publikuojamų Status List Token adresai. Tikrintojas, norintis iš anksto atsisiųsti ir podėlyje saugoti sąrašus prieš juos prireikiant, o ne kiekvieną sužinoti iš pirmojo jį nurodančio kredencialo, gali naudoti šį galutinį tašką. Tai neprivaloma; nė vienas aukščiau aprašyto pagrindinio proceso žingsnis nuo to nepriklauso.

Susijusios sąvokos

Dažnai užduodami klausimai

Ar tikrintojas kiekvienam tikrinamam kredencialui atsisiunčia atskirą sąrašą?

Ne, vienas Status List Token apima visus kredencialus, kuriuos jame nurodė išdavėjas, galbūt šimtus tūkstančių. Tikrintojas atsisiunčia tą patį token vieną kartą ir kiekvienam tikrinamam kredencialui perskaito kitą bitą, o po to iki ttl sekundžių naudoja podėlyje išsaugotą kopiją, kol ją reikia atsisiųsti iš naujo.

Ar išdavėjas gali sužinoti, kurį kredencialą tikrintojas patikrino?

Ne. Tikrintojas vienu užklausimu atsisiunčia visą suglaudintą bitų eilutę ir reikiamą bitą perskaito lokaliai, todėl išdavėjo matoma užklausa neturi nei indekso, nei kredencialo identifikatoriaus, tik GET paties sąrašo.

Koks skirtumas tarp suspended ir invalid?

INVALID (0x01) yra būsena, kuria specifikacijos pavyzdinis registras žymi visam laikui atšauktą kredencialą. SUSPENDED (0x02) yra atskira, grįžtama būsena, kurią išdavėjas taip pat gali nustatyti, o vėliau panaikinti, pavyzdžiui, kol nagrinėjamas ginčas. Norint jas atskirti, reikia bent dviejų bitų kiekvienam įrašui (bits: 2), todėl Status List Token, naudojantis bits: 1, gali atskirti tik valid nuo invalid.

Kam skirtas aggregation_uri?

Tai neprivaloma nuoroda Status List objekte į agregavimo galutinį tašką, kuriame išvardyti visų to išdavėjo Status List Token adresai (URI). Tikrintojas, norintis iš anksto įšildyti podėlį arba atrasti dar nematytus sąrašus, gali kreiptis į šį galutinį tašką, užuot laukęs, kol kredencialas nurodys vieną iš jų.

Šaltiniai

  1. IETF Token Status List (draft-ietf-oauth-status-list)

Šis puslapis skirtas informacijai ir nėra teisinė konsultacija. Dėl autoritetingų nurodymų kreipkitės tiesiogiai į IETF specifikaciją.

Susisiekite su mumis dėl EUDI Wallet integracijos