Grįžti į valdymo skydą

Dokumentacija

Sužinokite, kaip naudoti Asyntai

Access Tags

Apribokite žinių elementus tik įgaliotiems lankytojams — užtikrinama mūsų serveriuose, o ne DI

Eiti į Access Tags
Įmonė

Apžvalga

Ne visas turinys skirtas visiems: dokumentai tik nariams, konkretaus regiono medžiaga, mokamų lygių ištekliai. Su Access Tags vienas pokalbių robotas saugiai aptarnauja skirtingas auditorijas. Uždedate žymą ant žinių elemento ir nuo tos akimirkos elementas nematomas jokiam lankytojui — išskyrus tuos, kurių puslapis pateikia tą žymą, pasirašytą jūsų pačių serverio. Apribojimas užtikrinamas mūsų paieškos užklausoje dar prieš DI modeliui apskritai dalyvaujant. Lankytojas be žymos turinio gudriais klausimais neišgaus, nes jam jis niekada nebuvo paimtas.

Kaip tai veikia

  1. Žinių elementus žymite jūs - Access Tags puslapyje arba tiesiogiai per API; nepažymėti elementai toliau veikia visiems
  2. Jūsų serveris pasirašo kiekvieno lankytojo žymas - kai prisijungęs narys įkelia jūsų puslapį, jūsų vidinė sistema nustato jo teises ir pasirašo jas slaptu raktu, kurį turite tik jūs
  3. Valdiklis siunčia pasirašytą patvirtinimą - jis keliauja su kiekviena pokalbio žinute; naršyklė jį tik perneša ir negali pakeisti nesugadinusi parašo
  4. Mes patikriname ir filtruojame - galiojantis parašas atrakina elementus su atitinkančiomis žymomis; trūkstamas, pakeistas ar pasibaigęs patvirtinimas reiškia, kad lankytojas gauna tik viešą turinį

Kaip nustatyti

Įjunkite funkciją valdymo skydelio Access Tags puslapyje — pasirašymo raktas sugeneruojamas automatiškai. Laikykite jį tik savo serveryje; kiekvienas, kas jį turi, gali kurti galiojančius patvirtinimus.

Žymėkite turinį tame pačiame puslapyje arba siųsdami elementus per API:

POST /api/v1/knowledge/text/
{
  "title": "Members-only price list",
  "content": "...",
  "website_id": "123",
  "access_tags": ["premium"]
}

Tada tegul jūsų serveris išveda pasirašytą patvirtinimą šalia valdiklio fragmento. Pasirašoma žinutė — kableliais atskirtas žymų sąrašas, sujungtas vertikaliu brūkšniu su galiojimo pabaigos laiku, kai jį naudojate:

<?php
$tags    = "members,premium";          // this visitor's entitlements
$expires = time() + 3600;              // unix seconds, optional but recommended
$sig     = hash_hmac("sha256", $tags . "|" . $expires, $SECRET);
?>
<script>
window.Asyntai = window.Asyntai || {};
window.Asyntai.accessTags = "<?php echo $tags; ?>";
window.Asyntai.accessTagsExpires = "<?php echo $expires; ?>";
window.Asyntai.accessTagsSignature = "<?php echo $sig; ?>";
</script>

Tas pats parašas Node.js ir Python:

// Node.js
const crypto = require("crypto");
const sig = crypto.createHmac("sha256", SECRET)
                  .update(tags + "|" + expires).digest("hex");

# Python
import hmac, hashlib
sig = hmac.new(SECRET.encode(), f"{tags}|{expires}".encode(),
               hashlib.sha256).hexdigest()

Be galiojimo pabaigos pasirašykite tik pačią žymų eilutę. Su ja patvirtinimas nustoja veikti pasibaigus terminui — naudinga, kai teises galima atšaukti, nes lankytojas turi iš naujo įkelti jūsų valdomą puslapį, kad gautų šviežią patvirtinimą.

Žymų logika

Elemento žymos jungiamos IR: elementas pasiekiamas tik tada, kai kiekviena jo žyma yra lankytojo patvirtinime. Lankytojo patvirtinimas gali nešti kiek norite teisių, o palyginimas vyksta iškart su visomis.

Elemento žymos Lankytojo patvirtinimas Rezultatas
(none)bet kasMatoma — elementai be žymų yra vieši
northnorth, premiumMatoma
north, premiumnorthPaslėpta — patvirtinime trūksta premium
north, premiumnorth, premium, extraMatoma — papildomos teisės netrukdo

IR pasirinkta sąmoningai. Taikant «bent viena» atitikimą, antra žyma elemente išplėstų, kas jį mato, tad dokumento susiaurinimas iki dviejų grupių iš tikrųjų paskelbtų jį visą abiem. Taikant «visos» atitikimą, kiekviena pridėta žyma gali tik dar labiau apriboti, todėl klaida krinta į saugią pusę.

Kaip išreikšti «bet kuri iš»

Praleiskite šį matmenį prie elemento. Jei kiekvieno lankytojo patvirtinime yra jo regionas, dokumentas be regiono žymos pasiekiamas visiems regionams, o kitos jo žymos toliau galioja. Elementas, pažymėtas vien premium, taigi reiškia «bet kuris regionas, tik premium prenumeratoriai».

Tikram pasirinkimui tarp matmenų — tarkim, šiaurė-su-baziniu arba pietūs-su-premium ir nieko daugiau — pridėkite elementą du kartus, po vieną derinį, arba duokite abiem auditorijoms bendrą žymą, kurią jūsų serveris įtraukia į jų patvirtinimus.

Ribos

  • Iki 20 žymų vienam žinių elementui
  • Iki 50 žymų vieno lankytojo patvirtinime
  • 50 simbolių žymai; kableliai ir vertikalūs brūkšniai neleidžiami, nes patvirtinimas yra kableliais atskirta eilutė

Vėlesnis žymų keitimas

Žymas galima pakeisti esamame elemente jo iš naujo nesiunčiant. Pakeitimas galioja nuo kito klausimo — pats turinys iš naujo neapdorojamas.

POST /api/v1/knowledge/<id>/tags/
{
  "access_tags": ["premium"]
}

Nusiųskite tuščią sąrašą, kad elementas vėl taptų viešas. Žymas taip pat galite redaguoti ranka Access Tags puslapyje savo valdymo skydelyje.

Kas garantuojama

  • Užtikrinimas serverio pusėje - filtras veikia mūsų duomenų bazės užklausoje paieškos metu; neįgaliotiems lankytojams pažymėtų elementų DI kontekste apskritai nėra, tad nėra kam nutekėti
  • Visur fail-closed - nėra parašo, blogas parašas, pasibaigęs patvirtinimas, išjungta funkcija, pažemintas planas: kiekvienu iš šių atvejų lankytojas gauna tik viešą turinį, niekada daugiau
  • Naršyklė negali suklastoti prieigos - žymų redagavimas kūrėjo įrankiuose sugadina parašą; raktą turi tik jūsų serveris
  • Jūsų teisių logika lieka jūsų - mes niekada nesužinome, kaip sprendžiate, kas kokią žymą gauna; tik patikriname, kad jūsų serveris tai patvirtino

Verta žinoti

  • Access Tags — tai autorizacija, User Context — personalizacija - naudokite User Context papasakoti DI apie narį; naudokite Access Tags valdyti, kokiomis žiniomis DI gali remtis
  • Nuskaitytas svetainės turinys visada viešas - jis iš jūsų viešos svetainės, tad nėra ko riboti; žymos taikomos teksto, failų ir API elementams
  • Elemento žymos jungiamos IR - žr. Žymų logiką aukščiau; kiekviena elemento žyma turi būti lankytojo patvirtinime
  • Naujas raktas panaikina visus senus patvirtinimus - padarykite tai, jei raktas galėjo nutekėti, tada atnaujinkite puslapius, kad pasirašinėtų nauju
  • Žymų pavadinimus renkatės jūs - iki 20 elementui, po 50 simbolių, be kablelių ir vertikalių brūkšnių; lankytojų matomame pokalbyje jos niekada nerodomos

Dera su User Context: viena funkcija valdo, kokias žinias DI gali naudoti šiam lankytojui, kita pasako DI, kas lankytojas yra.

Naudotojo kontekstas Perduokite prisijungusio naudotojo duomenis savo DI pokalbių robotui personalizuotiems pokalbiams

Pastaba: Access Tags yra Enterprise sutarties dalis. Rašykite [email protected] ir viską paaiškinsime.