Ensimmäinen istunto voittaa: OpenVPN-kirjautumisten portitus ennen häätöä
Myöhemmän kirjautumisen hylkääminen ei ole sama kuin vanhan korvaaminen. Päätös on tehtävä ennen samannimistä häätöä, ja paikan tarkistuksen on oltava atominen.
Käytäntö, joka sallii yhden istunnon tiliä kohden, näyttää selvältä, kunnes toinen kirjautuminen saapuu. Kaksi lopputulosta on mahdollista: tulokas korvaa nykyisen istunnon tai nykyinen istunto pitää paikan ja tulokas hylätään. Vain jälkimmäinen on ensimmäinen istunto voittaa -käytäntö. Asiakasasetus, johon useimmat tarttuvat, mahdollistaa samanaikaisuuden eikä siksi tuota sitä.
Kaksi sopimusta kätkeytyy yhden asetuksen taakse
Kun samanaikaisuus on pois päältä, toinen yhteys samalla varmennenimellä voi syrjäyttää jo käynnissä olevan istunnon. Samanaikaisuuden päälle kytkeminen sallii useita istuntoja kerralla, mikä on rajoituksen vastakohta. Kumpikaan tila ei ole hylkäyskäytäntö, joten päätös on tehtävä aivan muualla.
Kirjoita sopimus muistiin ennen kuin toteutat mitään: ketä hylätään, mikä todiste tunnistaa nykyisen istunnon ja mitä tapahtuu, kun istunto kuolee ilman puhdasta katkaisua. Käytäntöä, jota kukaan ei ole muotoillut näin, ei voi testata myöhemmin.
Häätö tapahtuu ennen yhteyskoukkua
Palvelimen 2.6 koodipolulla uuden asiakkaan varhainen valmistelu poistaa olemassa olevat samannimiset ilmentymät, kun samanaikaisuus on pois päältä. Poisto tapahtuu ennen kuin yhteyskäsittelijöiden ketju käynnistyy. Siksi komentosarja, joka havaitsee kaksoiskappaleen ja palauttaa virheen, hylkää tulokkaan sen jälkeen, kun nykyinen istunto on jo heitetty pois - täsmälleen se lopputulos, jonka käytäntö oli tarkoitettu estämään. Upstream-toteutuksen takaisinkutsujen järjestys on ainoa luotettava vastaus rakenteellesi.
| Stage | Who can still refuse | Effect on the incumbent |
|---|---|---|
| Certificate check | Server trust configuration | None |
| Authentication decision | The authentication controller | None, because establishment has not run |
| Connect handler | A profile script | Already evicted in the same-name case |
| Post-establishment | Status tooling, monitoring | Both sessions already exist or one is gone |
Tilatiedoston kyselykään ei ole portti. Kaksi samaan aikaan saapuvaa yritystä voivat molemmat nähdä tyhjän paikan ennen kuin kumpikaan vahvistaa sen, ja molemmat jatkavat.
Siirrä päätös todennukseen
Hallintaliittymä voi ottaa todennuksen päätöksen vastuulleen varmenneen tarkistuksen jälkeen. Siinä järjestelyssä ohjain ei ole valvoja: se vastaanottaa jokaisen yhdistävän asiakasilmentymän ja vastaa, saako kyseinen ilmentymä jatkaa. Koska vastaus saapuu ennen yhteyden muodostusta, hylkäys jättää nykyisen istunnon koskemattomaksi. Sama kanava ilmoittaa katkaisuista, ja niin ohjain oppii, että paikka on vapautettu laillisesti.
Jokaisen uuden ilmentymän on läpäistävä tämä portti, mukaan lukien uudelleenyhdistämiset ja mikä tahansa polku, joka todennuu uudelleen ilman kyselyä. Portti, johon jotkin ilmentymät eivät koskaan saavu, ei suojaa mitään, ja puuttuminen pysyy näkymättömänä, kunnes joku kokeilee ohitusta.
Tokenit voivat kävellä portin ohi
Kun token on myönnetty, palvelin voi validoida sen sisäisesti ja ohittaa ulkoisen todennuksen kyseiselle yhteydelle. Hallintakutsua ei koskaan tapahdu, joten vain siellä toteutettu paikan tarkistus ei koskaan näe uutta ilmentymää. Tämä käytös on käyttäjille mukavuus ja samanaikaisuuskäytännölle aukko. Pakota tokenilla todennetut yhteydet läpäisemään vastaava valtuutettu tarkistus tai poista token-polku käytöstä, kun käytäntö vaatii päätöksen jokaisesta yhteydestä.
Älä kompensoi tätä hyväksymällä jokainen token ehdoitta. Vanhentuneen tai virheellisen tokenin on silti epäonnistuttava, ja sen on epäonnistuttava saman päätöskohdan kautta kuin kaiken muunkin.
Sido varaus ilmentymään, älä osoitteeseen
Osoite on heikko identiteetti: uudelleenyhdistäminen samalta kannettavalta voi tulla eri osoitteesta, ja kopioitu kirjautumistieto voi tulla samasta osoitteesta. Sido varaus asiakasilmentymään, jonka palvelin määrittää, jotta jo hyväksytyn ilmentymän uudelleentodennus tunnistetaan omistajaksi. Uuden ilmentymän tunnisteen on hankittava oma paikkansa ensimmäinen voittaa -päätöksellä, vaikka se esittäisi saman tokenin.
Vapauta vain epäonnistuneeseen yritykseen kuuluva varaus. Vanhemman yrityksen viivästynyt katkaisutapahtuma ei saa tyhjentää uudemman omistajan paikkaa, siksi vapautus nimeää ilmentymän eikä tiliä. Kun ohjain on käynnistetty uudelleen, täsmäytä elävät istunnot ennen kuin hyväksyt ketään, ja sovella samaa sääntöä jokaisessa yhdyskäytävässä, joka palvelee tiliä.
Päätä erikseen, miten todella vanhentunut paikka palautetaan. Ylläpitäjä tarvitsee dokumentoidun tavan tyhjentää se, eikä tämän polun pitäisi olla käytettävissä käyttäjälle, joka vain napsauttaa yhdistä uudelleen.
Testaa parit, joilla on merkitystä: kaksi lähes samanaikaista kirjautumista, uudelleenyhdistäminen puhtaan katkaisun jälkeen, nykyisen istunnon uudelleentodennus, hylätty tulokas ja ohjaimen uudelleenkäynnistys. Jokaisessa tapauksessa nykyisen istunnon on pysyttävä käyttökelpoisena ja tulokas on hylättävä ilman sivuvahinkoja muille tileille.