Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használhat biztonsági identitásokat az Azure AI Search szűrőivel együtt a keresési eredmények felhasználói csoporttagság alapján történő levágásához.
Ez a cikk a következő feladatokat ismerteti:
- Csoportok és felhasználók létrehozása
- A felhasználó társítása a létrehozott csoporttal
- Gyorsítótárazd az új csoportokat
- Dokumentumok indexelése társított csoportokkal
- Keresési kérelem kiállítása csoportazonosító-szűrővel
Előfeltételek
Az Azure AI Searchben az indexnek rendelkeznie kell egy biztonsági mezővel azon csoportidentitások listájának tárolásához, amelyek olvasási hozzáféréssel rendelkeznek a dokumentumhoz. Ez a használati eset feltételezi, hogy egy-az-egyhez típusú levelezés történik egy biztonságos elem (például egy magánszemély főiskolai alkalmazása) és egy olyan biztonsági mező között, amely meghatározza, hogy kinek van hozzáférése az adott elemhez (felvételi személyzet).
A felhasználók, csoportok és társítások létrehozásához bérlői rendszergazdai engedélyekkel (tulajdonos vagy rendszergazda) kell rendelkeznie.
Az alkalmazást több-bérlős alkalmazásként is regisztrálni kell az alábbi eljárásban leírtak szerint.
Alkalmazás regisztrálása az Azure Active Directoryban
Ez a lépés integrálja az alkalmazást az Azure Active Directoryval a felhasználói és csoportfiókok bejelentkezéseinek elfogadása céljából. Ha Ön nem bérlői rendszergazdaként van jelen a szervezetben, akkor előfordulhat, hogy az alábbi lépések végrehajtásához létre kell hoznia egy új bérlőt.
Az Azure portálon keresse meg az Azure Active Directory-bérlőt.
A bal oldalon, a Kezelésterületen válassza az Alkalmazásregisztrációklehetőséget, majd válassza Új regisztrációslehetőséget.
Adjon egy nevet a regisztrációnak, esetleg a keresőalkalmazás nevéhez hasonló nevet. Lásd ehhez a cikkhez további választható tulajdonságokról.
Válassza a Regisztráláslehetőséget.
Az alkalmazásregisztráció létrehozása után másolja ki az alkalmazás (ügyfél) azonosítóját. Ezt a karakterláncot meg kell adnia az alkalmazásának.
Ha a DotNetHowToSecurityTrimmingen lépeget, illessze be ezt az értéket a app.config fájlba.
Másolja ki a címtár (bérlő) azonosítóját.
A bal oldalon válassza API-engedélyeket, majd válassza az Engedély hozzáadásalehetőséget.
Válassza Microsoft Graph, majd válassza Delegált engedélyeklehetőséget.
Keresse meg, majd adja hozzá a következő delegált engedélyeket:
- Directory.ReadWrite.All
- Group.ReadWrite.All
- User.ReadWrite.All jogosultság
A Microsoft Graph olyan API-t biztosít, amely rest API-n keresztül teszi lehetővé az Azure Active Directory programozott elérését. Az útmutató kódmintája az engedélyekkel hívja meg a Microsoft Graph API-t csoportok, felhasználók és társítások létrehozásához. Az API-k a csoportazonosítók gyorsítótárazására is használhatók a gyorsabb szűrés érdekében.
Válassza a(z) lehetőséget, hogy rendszergazdai hozzájárulást adjon a bérlő számára a hozzájárulási folyamat befejezéséhez.
Felhasználók és csoportok létrehozása
Ha egy már létrehozott alkalmazáshoz ad hozzá keresést, előfordulhat, hogy meglévő felhasználói és csoportazonosítók vannak az Azure Active Directoryban. Ebben az esetben kihagyhatja a következő három lépést.
Ha azonban nincsenek meglévő felhasználói, a biztonsági főelveket a Microsoft Graph API-k segítségével hozhatja létre. Az alábbi kódrészletek bemutatják, hogyan hozhat létre azonosítókat, amelyek adatértékekké válnak az Azure AI Search-index biztonsági mezőjéhez. A hipotetikus főiskolai felvételi kérelemben ez lenne a felvételi személyzet biztonsági azonosítója.
A felhasználói és csoporttagság nagyon változékony lehet, különösen a nagy szervezetekben. A felhasználói és csoportidentitásokat fejlesztő kódnak elég gyakran kell futnia ahhoz, hogy átvegye a szervezeti tagság változásait. Hasonlóképpen, az Azure AI Search-indexhez hasonló frissítési ütemezésre van szükség az engedélyezett felhasználók és erőforrások aktuális állapotának megfelelően.
1. lépés: Csoport létrehozása
private static Dictionary<Group, List<User>> CreateGroupsWithUsers(string tenant)
{
Group group = new Group()
{
DisplayName = "My First Prog Group",
SecurityEnabled = true,
MailEnabled = false,
MailNickname = "group1"
};
2. lépés: Felhasználói létrehozása
User user1 = new User()
{
GivenName = "First User",
Surname = "User1",
MailNickname = "User1",
DisplayName = "First User",
UserPrincipalName = String.Format("user1@{0}", tenant),
PasswordProfile = new PasswordProfile() { Password = "********" },
AccountEnabled = true
};
3. lépés: Felhasználó és csoport társítása
List<User> users = new List<User>() { user1, user2 };
Dictionary<Group, List<User>> groups = new Dictionary<Group, List<User>>() { { group, users } };
4. lépés: A csoportok azonosítóinak gyorsítótárazása
Esetlegesen, a hálózati késés csökkentése érdekében, gyorsítótárazhatja a felhasználói csoportok társításait, hogy amikor keresési kérések történnek, a rendszer a csoportokat a gyorsítótárból adja vissza, ezzel minimalizálva az oda-vissza utat. Az Batch API- használatával egyetlen Http-kérést küldhet több felhasználóval, és létrehozhatja a gyorsítótárat.
A Microsoft Graph célja, hogy nagy mennyiségű kérést kezeljen. Ha túl sok kérés történik, a Microsoft Graph a 429-es HTTP-állapotkóddal meghiúsul. További információkért lásd: Microsoft Graph korlátozása.
Dokumentum indexelése a kijelölt csoportjaik alapján
Az Azure AI Search lekérdezési műveletei egy Azure AI Search-indexen keresztül lesznek végrehajtva. Ebben a lépésben egy indexelési művelet a kereshető adatokat importálja egy indexbe, beleértve a biztonsági szűrőkként használt azonosítókat is.
Az Azure AI Search nem hitelesíti a felhasználói identitásokat, és nem biztosít logikát annak megállapításához, hogy a felhasználó mely tartalmakat tekintheti meg. A biztonsági vágás használati esete azt feltételezi, hogy megadja a bizalmas dokumentum és a hozzáféréssel rendelkező csoportazonosító közötti társítást, amelyet érintetlenül importálnak a keresési indexbe.
A hipotetikus példában az Azure AI Search-indexRE vonatkozó PUT-kérés törzse tartalmazza a pályázó főiskolai esszéjét vagy átiratát, valamint azt a csoportazonosítót, amely jogosult a tartalom megtekintésére.
Az útmutató kódmintájában használt általános példában az indexművelet a következőképpen nézhet ki:
private static void IndexDocuments(string indexName, List<string> groups)
{
IndexDocumentsBatch<SecuredFiles> batch = IndexDocumentsBatch.Create(
IndexDocumentsAction.Upload(
new SecuredFiles()
{
FileId = "1",
Name = "secured_file_a",
GroupIds = new[] { groups[0] }
}),
...
};
IndexDocumentsResult result = searchClient.IndexDocuments(batch);
Keresési kérelem kiállítása
Biztonsági vágás céljából az index biztonsági mezőjének értékei statikus értékek a dokumentumok keresési eredményekbe való belefoglalásához vagy kizárásához. Ha például a Belépések csoportazonosítója "A11B22C33D44-E55F66G77-H88I99JKK", akkor az Azure AI Search-index azon dokumentumai, amelyeknél az azonosító szerepel a biztonsági mezőben, (vagy kizárva) szerepelnek a hívónak küldött keresési eredményekben.
Ha a kérést kibocsátó felhasználó csoportjai alapján szeretné szűrni a keresési eredményekben visszaadott dokumentumokat, tekintse át az alábbi lépéseket.
1. lépés: A felhasználó csoportazonosítóinak lekérése
Ha a felhasználó csoportjai még nem lettek gyorsítótárazva, vagy a gyorsítótár lejárt, adja ki a csoportokat kérést.
private static async void RefreshCache(IEnumerable<User> users)
{
HttpClient client = new HttpClient();
var userGroups = await _microsoftGraphHelper.GetGroupsForUsers(client, users);
_groupsCache = new ConcurrentDictionary<string, List<string>>(userGroups);
}
2. lépés: A keresési kérelem összeállítása
Feltéve, hogy rendelkezik a felhasználó csoporttagságával, kiadhatja a keresési kérelmet a megfelelő szűrőértékekkel.
private static void SearchQueryWithFilter(string user)
{
// Using the filter below, the search result will contain all documents that their GroupIds field
// contain any one of the Ids in the groups list
string filter = String.Format("groupIds/any(p:search.in(p, '{0}'))", string.Join(",", String.Join(",", _groupsCache[user])));
SearchOptions searchOptions =
new SearchOptions()
{
Filter = filter
};
searchOptions.Select.Add("name");
SearchResults<SecuredFiles> results = searchClient.Search<SecuredFiles>("*", searchOptions);
Console.WriteLine("Results for groups '{0}' : {1}", _groupsCache[user], results.GetResults().Select(r => r.Document.Name));
}
3. lépés: Az eredmények kezelése
A válasz tartalmaz egy szűrt dokumentumlistát, amely a felhasználó által megtekintésre jogosult dokumentumokból áll. A keresési eredmények oldalának felépítésétől függően előfordulhat, hogy a szűrt eredményhalmazt tükröző vizuális jeleket is fel szeretne venni.
Összefoglalás
Ebben az útmutatóban megtanult egy módszert, amellyel felhasználói bejelentkezésekkel szűrheti ki a dokumentumokat az Azure AI Search találatai között, és leszűkítette azokat a dokumentumokat, amelyek nem felelnek meg a kérésben megadott szűrőnek.