Политика што дозволува една сесија по сметка изгледа решена сѐ уште доаѓа втората најава. Можни се два исходи: новодојдениот ја заменува постојната сесија или постојната сесија го задржува слотот и новодојдениот се одбива. Само вториот е политика каде првата сесија победува. Клиентската опција по која посегнуваат повеќето ја вклучува истовременоста и затоа не го дава тоа.

Два договори се кријат зад едно поставување

Кога истовременоста е исклучена, втора врска со истото име на сертификат може да ја истисне сесијата што веќе работи. Вклучувањето на истовременоста дозволува неколку сесии одеднаш, што е спротивно на ограничување. Ниту едната состојба не е политика на одбивање, па одлуката мора да се донесе сосема на друго место.

Запишете го договорот пред да имплементирате било што: кој се одбива, каков доказ ја идентификува постојната сесија и што се случува кога сесијата ќе умре без чисто исклучување. Политика што никој не ја формулирал така не може подоцна да се тестира.

Истиснувањето се случува пред вашата кука за поврзување

На кодната патека на серверот 2.6, раната подготовка за нов клиент ги отстранува постојните примероци со истото име кога истовременоста е исклучена. Тоа отстранување се случува пред да се изврши синџирот на обработувачи на поврзувањето. Затоа скрипта што ќе го забележи дупликатот и ќе врати грешка го одбива новодојдениот откако постојната сесија веќе е исфрлена - токму исходот што политиката требаше да го спречи. Редоследот на повратните повици во upstream имплементацијата е единствениот сигурен одговор за вашата градба.

StageWho can still refuseEffect on the incumbent
Certificate checkServer trust configurationNone
Authentication decisionThe authentication controllerNone, because establishment has not run
Connect handlerA profile scriptAlready evicted in the same-name case
Post-establishmentStatus tooling, monitoringBoth sessions already exist or one is gone

И анкетирањето на статусната датотека не е порта. Два обиди што пристигнуваат заедно можат и двата да видат празен слот пред ниту еден да го потврди, и двата продолжуваат.

Преместете ја одлуката во автентикацијата

Управувачкиот интерфејс може да ја преземе одлуката за автентикација по проверката на сертификатот. Во тој распоред контролерот не е набљудувач: тој го прима секој клиентски примерок што се поврзува и одговара дали тој примерок смее да продолжи. Бидејќи одговорот доаѓа пред воспоставувањето, одбивањето ја остава постојната сесија недопрена. Истиот канал известува за исклучувања, и така контролерот дознава дека слотот е законски ослободен.

Секој нов примерок мора да помине низ оваа порта, вклучително повторните поврзувања и секоја патека што се реавтентификува без прашање. Порта до која некои примероци никогаш не стигнуваат не штити ништо, а пропустот останува невидлив сѐ уште некој не го проба заобиколувањето.

Токените можат да поминат покрај портата

Откако ќе се издаде токен, серверот може да го валидира внатрешно и да ја прескокне надворешната автентикација за таа врска. Управувачкиот повик никогаш не се случува, па проверката на слотот имплементирана само таму никогаш не го гледа новиот примерок. Таквото однесување е погодност за корисниците и дупка за политиката на истовременост. Направете врските автентифицирани со токен да поминат еквивалентна авторитативна проверка или исклучете ја патеката на токенот кога политиката бара одлука за секоја врска.

Не го надоместувајте тоа со безусловно прифаќање на секој токен. Истечен или невалиден токен сѐ уште мора да не успее, и мора да не успее низ истата точка на одлука како и сѐ друго.

Врзете ја резервацијата за примерок, не за адреса

Адресата е слаб идентитет: повторно поврзување од истиот преносен сметач може да дојде од друга адреса, а копирани акредитиви може да дојдат од истата. Врзете ја резервацијата за клиентскиот примерок што го доделува серверот, за повторната автентикација на веќе примениот примерок да се препознае како сопственик. Новиот идентификатор на примерок мора да го добие својот слот преку одлуката првиот победува, дури и кога го претставува истиот токен.

Ослободете ја само резервацијата што му припаѓа на неуспешниот обид. Одложен настан за исклучување од постар обид не смее да го избрише слотот на понов сопственик, затоа ослободувањето го именува примерокот, а не сметката. По рестартирањето на контролерот, усогласете ги живите сесии пред да примите некого, и применете го истото правило на секоја порта што ја опслужува сметката.

Одлучете одделно како се обновува навистина застарен слот. На администраторот му треба документиран начин да го исчисти, и таа патека не треба да биде достапна за корисник што само кликнува повторно поврзување.

Тестирајте ги паровите што се важни: две речиси истовремени најави, повторно поврзување по чисто исклучување, повторна автентикација на постојната сесија, одбиен новодојденец и рестартирање на контролерот. Во секој случај постојната сесија мора да остане употреблива, а новодојдениот да се одбие без колатерална штета за другите сметки.

Поврзани статии