Egyszeri bejelentkezés hozzáadása robothoz
A KÖVETKEZŐKRE VONATKOZIK: SDK v4
Ez a cikk bemutatja, hogyan használható az egyszeri bejelentkezés (SSO) funkció egy robotban. Ehhez ez a funkció egy fogyasztói robotot ( más néven gyökér- vagy szülőrobotot) használ egy képesség- vagy gyermekrobottal való interakcióhoz. Ez a cikk a gyökérrobot és a készségrobot kifejezéseket használja.
Ha SSO-támogatással rendelkezik, a felhasználók identitásszolgáltatóval jelentkezhetnek be a gyökérrobotba, és nem kell újra bejelentkeznie, amikor a vezérlés átad egy képességet.
A gyökér- és képességrobotok különálló robotok, amelyek potenciálisan különböző kiszolgálókon futnak, és mindegyik saját külön memóriával és állapottal rendelkezik. A készségekkel kapcsolatos további információkért tekintse meg a készségek áttekintését és a képesség implementálását ismertető témakört. A felhasználói hitelesítéssel kapcsolatos további információkért tekintse meg a Bot Framework hitelesítési alapjait, a felhasználói hitelesítést és a hitelesítés hozzáadása robothoz című témakört.
Fontos
Ha azure AI Bot Service-hitelesítést használ webchat, figyelembe kell vennie néhány fontos biztonsági szempontot. További információkért tekintse meg a REST-hitelesítésről szóló cikk biztonsági szempontokat ismertető szakaszát.
Előfeltételek
- A robot alapismereteinek, az állapotkezelésnek és az egyszeri bejelentkezésnek a ismerete.
- A Párbeszédtár ismerete és a szekvenciális beszélgetési folyamat implementálása és a párbeszédpanelek újrafelhasználása
- Az Azure és az OAuth 2.0 fejlesztésének ismerete.
- Visual Studio 2019 vagy újabb a .NET-hez.
- Az egyszeri bejelentkezés egyszerű képességfelhasználóval és C#-beli szakértelemmel.
Tudnivalók a mintáról
Ez a cikk két robotra hivatkozik: a RootBotra és a SkillBotra. A RootBot továbbítja a tevékenységeket a SkillBotnak. Ezt a tipikus készségforgatókönyvet modellezhetik:
- A gyökérrobot egy vagy több készségrobotot hív meg.
- A gyökér- és képességrobotok egyaránt implementálják a Hitelesítés hozzáadása robothoz című cikkben leírt alapszintű hitelesítést.
- A felhasználó bejelentkezik a gyökérrobotba.
- Az egyszeri bejelentkezés és a gyökérrobotba való bejelentkezés miatt a rendszer anélkül jelentkezik be a képességrobotba, hogy újra felhasználói beavatkozást kellene igényelnie.
A Bot Framework hitelesítésének kezelésével kapcsolatos áttekintésért tekintse meg a felhasználói hitelesítést. Az egyszeri bejelentkezés háttérinformációiért lásd az egyszeri bejelentkezést.
A RootBot támogatja az egyszeri bejelentkezést. A felhasználó nevében kommunikál a SkillBottal anélkül, hogy a felhasználónak újra hitelesítenie kellene magát a _SkillBot.
A mintában szereplő összes projekthez a következőkre van szükség:
- Egy Microsoft Entra ID-alkalmazás, amely regisztrál egy roboterőforrást az Azure-ban.
- Egy Microsoft Entra id identitásszolgáltatói alkalmazás hitelesítéshez.
Feljegyzés
Jelenleg csak a Microsoft Entra-azonosítójú identitásszolgáltató támogatott.
Az Azure RootBot-erőforrás létrehozása
- Azure-roboterőforrás létrehozása az Azure Portalon a
RootBot
. Kövesse az Azure-roboterőforrás létrehozása című cikkben leírt lépéseket. - Másolja és mentse a robotregisztrációs alkalmazás azonosítóját és az ügyfél titkos kódját.
A Microsoft Entra ID-identitás létrehozása a RootBothoz
A Microsoft Entra ID egy felhőalapú identitásszolgáltatás, amely lehetővé teszi olyan alkalmazások létrehozását, amelyek biztonságosan bejelentkeznek a felhasználókba az olyan iparági szabvány protokollok használatával, mint az OAuth2.0.
Hozzon létre egy identitásalkalmazást, amely a
RootBot
Microsoft Entra-azonosítót használja a felhasználó hitelesítéséhez. Kövesse a Microsoft Entra id-identitásszolgáltató létrehozása című cikkben leírt lépéseket.A bal oldali panelen válassza a Jegyzék elemet.
Állítsa be
accessTokenAcceptedVersion
a 2 értéket.Válassza a Mentés lehetőséget.
A bal oldali panelen válassza az API-k felfedése lehetőséget.
A jobb oldali panelen válassza a Hatókör hozzáadása lehetőséget.
A jobb szélső Hatókör hozzáadása szakaszban válassza a Mentés és folytatás lehetőséget.
A megjelenített ablakban, a Ki tud hozzájárulni? területen válassza a Rendszergazdák és felhasználók lehetőséget.
Adja meg a többi szükséges információt.
Válassza a Hatókör hozzáadása lehetőséget.
Másolja és mentse a hatókör értékét.
OAuth-kapcsolatbeállítás létrehozása a RootBothoz
Hozzon létre egy Microsoft Entra-azonosító kapcsolatot a
RootBot
robotregisztrációban, és adja meg a Microsoft Entra ID-ban és az alább leírt értékben leírt értékeket.Hagyja üresen a token Exchange URL-címét .
A Hatókörök mezőbe írja be az
RootBot
előző lépésekben mentett hatókörértéket.Feljegyzés
A hatókörök tartalmazzák azt az URL-címet, amelyet a felhasználó először bejelentkezik a gyökérrobotba, míg a tokencsere URL-címe üres marad.
Tegyük fel például, hogy a gyökérrobot-alkalmazásazonosító rootAppId, a skill bot appid pedig skillAppId. A gyökérrobot hatókörei úgy fognak kinézni, mint a api://rootAppId/customScope, amely a felhasználó bejelentkezésére szolgál. Ez a gyökérrobot hatókörei az egyszeri bejelentkezés során api://skillAppId/customscope lesznek kicserélve.
Másolja és mentse a kapcsolat nevét.
Az Azure SkillBot-erőforrás létrehozása
- Azure-roboterőforrás létrehozása az Azure Portalon a
SkillBot
. Kövesse az Azure-roboterőforrás létrehozása című cikkben leírt lépéseket. - Másolja és mentse a robotregisztrációs alkalmazás azonosítóját és az ügyfél titkos kódját.
A Microsoft Entra ID-identitás létrehozása a SkillBothoz
A Microsoft Entra ID egy felhőalapú identitásszolgáltatás, amely lehetővé teszi olyan alkalmazások létrehozását, amelyek biztonságosan bejelentkeznek a felhasználókba az olyan iparági szabvány protokollok használatával, mint az OAuth2.0.
Hozzon létre egy identitásalkalmazást, amely a
SkillBot
Microsoft Entra ID-t használja a robot hitelesítéséhez. Kövesse a Microsoft Entra id-identitásszolgáltató létrehozása című cikkben leírt lépéseket.A bal oldali panelen válassza a Jegyzék elemet.
Állítsa be
accessTokenAcceptedVersion
a 2 értéket.Válassza a Mentés lehetőséget.
A bal oldali panelen válassza az API-k felfedése lehetőséget.
A jobb oldali panelen válassza a Hatókör hozzáadása lehetőséget.
A jobb szélső Hatókör hozzáadása szakaszban válassza a Mentés és folytatás lehetőséget.
A megjelenített ablakban, a Ki tud hozzájárulni? területen válassza a Rendszergazdák és felhasználók lehetőséget.
Adja meg a többi szükséges információt.
Válassza a Hatókör hozzáadása lehetőséget.
Másolja és mentse a hatókör értékét.
Válassza az Ügyfélalkalmazás hozzáadása lehetőséget. A jobb szélső szakaszban, az Ügyfélazonosító mezőben adja meg a Korábban mentett RootBot identitásalkalmazás-azonosítót . Győződjön meg arról, hogy a RootBot-identitást használja, és nem a regisztrációs alkalmazás azonosítóját.
Feljegyzés
Ügyfélalkalmazások esetén az Azure AI Bot Service nem támogatja az egyszeri adást a Microsoft Entra ID B2C-identitásszolgáltatóval.
Az Engedélyezett hatókör csoportban jelölje be a jelölőnégyzetet a hatókör értéke szerint.
Válassza az Alkalmazás hozzáadása lehetőséget.
A bal oldali navigációs panelen válassza az API-engedélyeket. Ajánlott eljárás az alkalmazás API-engedélyeinek explicit beállítása.
A jobb oldali panelen válassza az Engedély hozzáadása lehetőséget.
Válassza a Microsoft API-kat , majd a Microsoft Graphot.
Válassza a Delegált engedélyek lehetőséget , és győződjön meg arról, hogy a szükséges engedélyek ki vannak választva. Ehhez a mintához az alábbi engedélyek szükségesek.
Feljegyzés
A RENDSZERGAZDAI HOZZÁJÁRULÁS KÖTELEZŐként megjelölt engedélyekhez a felhasználónak és a bérlő rendszergazdának is be kell jelentkeznie.
- openid
- profil
- User.Read
- User.ReadBasic.All
Jelölje be az Engedélyek hozzáadása lehetőséget.
OAuth-kapcsolatbeállítás létrehozása a SkillBothoz
Hozzon létre egy Microsoft Entra-azonosító kapcsolatot a
SkillBot
robotregisztrációban, és adja meg a Microsoft Entra ID-ban és az alább leírt értékeket.A Token Exchange URL-címmezőjében adja meg az
SkillBot
előző lépésekben mentett hatókörértéket.A Hatókörök mezőbe írja be a következő értékeket üres szóközzel elválasztva:
profile
User.ReadBasic.All
User.Read
openid
.Másolja és mentse egy fájlba a kapcsolat nevét.
A kapcsolat tesztelése
- Válassza ki a kapcsolati bejegyzést a létrehozott kapcsolat megnyitásához.
- Válassza a Kapcsolat tesztelése lehetőséget a Szolgáltatói kapcsolat beállítása panel tetején.
- Első alkalommal meg kell nyitnia egy új böngészőlapot, amely felsorolja az alkalmazás által kért engedélyeket, és kérni fogja, hogy fogadja el.
- Válassza az Elfogadás lehetőséget.
- Ennek ezután át kell irányítania egy tesztkapcsolatra a <kapcsolat neve> Sikeres lapra.
További információ: Microsoft Entra ID for developers (v1.0) – áttekintés és Microsoft Identitásplatform (2.0-s verzió) áttekintése. A v1 és a v2 végpontok közötti különbségekről további információt a Miért frissít a Microsoft Identitásplatform (2.0-s verzió)?. További információ: Microsoft Identitásplatform (korábban Microsoft Entra-azonosító fejlesztőknek).
A mintakód előkészítése
A fájlt mindkét appsettings.json
mintában frissítenie kell az alábbiak szerint.
Klónozza az egyszeri bejelentkezést a GitHub-adattárból származó Egyszerű képességfelhasználó és szakértelem mintával.
Nyissa meg a
SkillBot
projektfájltappsettings.json
. Rendelje hozzá a következő értékeket a mentett fájlból:{ "MicrosoftAppId": "<SkillBot registration app ID>", "MicrosoftAppPassword": "<SkillBot registration password>", "ConnectionName": "<SkillBot connection name>", "AllowedCallers": [ "<RootBot registration app ID>" ] }
Nyissa meg a
RootBot
projektfájltappsettings.json
. Rendelje hozzá a következő értékeket a mentett fájlból:{ "MicrosoftAppId": "<RootBot registration app ID>", "MicrosoftAppPassword": "<RootBot registration password>", "ConnectionName": "<RootBot connection name>", "SkillHostEndpoint": "http://localhost:3978/api/skills/", "BotFrameworkSkills": [ { "Id": "SkillBot", "AppId": "<SkillBot registration app ID>", "SkillEndpoint": "http://localhost:39783/api/messages" } ] }
A minták tesztelése
A teszteléshez használja a következőket:
RootBot
Parancsoklogin
segítségével a felhasználó bejelentkezhet a Microsoft Entra-azonosító regisztrációjába aRootBot
. Bejelentkezés után az egyszeri bejelentkezés gondoskodik a bejelentkezésrőlSkillBot
is. A felhasználónak nem kell újra bejelentkeznie.token
megjeleníti a felhasználó jogkivonatát.logout
kijelentkezteti a felhasználót aRootBot
rendszerből.
SkillBot
Parancsokskill login
lehetővé teszi aRootBot
felhasználó nevében történőSkillBot
bejelentkezést. A felhasználó nem jelenik meg bejelentkezési kártyán, ha már bejelentkezett, kivéve, ha az egyszeri bejelentkezés sikertelen.skill token
megjeleníti a felhasználó jogkivonatát aSkillBot
.skill logout
kijelentkezteti a felhasználót aSkillBot
Feljegyzés
Amikor a felhasználók először próbálják ki az egyszeri bejelentkezést egy képességen, előfordulhat, hogy OAuth-kártyával jelentkeznek be. Ennek az az oka, hogy még nem járultak hozzá a képesség Microsoft Entra ID alkalmazásához. Ennek elkerülése érdekében rendszergazdai hozzájárulást adhatnak a Microsoft Entra ID alkalmazás által kért gráfengedélyekhez.
Ha még nem tette meg, telepítse a Bot Framework Emulatort. Lásd még : Hibakeresés az Emulátorsal.
Konfigurálnia kell az Emulatort a robotminta-bejelentkezés működéséhez. Kövesse az alábbi lépéseket: az Emulátor konfigurálása hitelesítéshez című témakörben leírtak szerint.
A hitelesítési mechanizmus konfigurálása után elvégezheti a tényleges robotminta-tesztelést.
A Visual Studióban nyissa meg a
SSOWithSkills.sln
megoldást, és konfigurálja úgy, hogy több folyamattal kezdje el a hibakeresést.Kezdje el helyileg a hibakeresést a számítógépen. Figyelje meg, hogy a
RootBot
projektfájlbanappsettings.json
a következő beállításokat használja:"SkillHostEndpoint": "http://localhost:3978/api/skills/" "SkillEndpoint": "http://localhost:39783/api/messages"
Feljegyzés
Ezek a beállítások azt jelentik, hogy mindkettővel
RootBot
ésSkillBot
a helyi gépen futnak. Az Emulator aRootBot
3978-at, a 39783-at pedigRootBot
SkillBot
a 39783-at. Amint elkezdi a hibakeresést, két alapértelmezett böngészőablak nyílik meg. Az egyik a 3978-as porton, a másik a 39783-at.Indítsa el az Emulátort.
Amikor csatlakozik a robothoz, adja meg a
RootBot
regisztrációs alkalmazás azonosítóját és jelszavát.Írja be
hi
a beszélgetés indításához.Adja meg a bejelentkezést. Ekkor
RootBot
megjelenik egy bejelentkezés az AAD-hitelesítési kártyára.Válassza a Bejelentkezés lehetőséget. Megjelenik az előugró párbeszédpanel , amelyen a Megnyitás megerősítése URL-cím jelenik meg.
Válassza a Megerősítés elemet. A rendszer bejelentkezik, és megjelenik a
RootBot
jogkivonat.A jogkivonat ismételt megjelenítéséhez adja meg a jogkivonatot .
Most már készen áll a kommunikációra a
SkillBot
. Miután bejelentkezett aRootBot
használatával, nem kell újból megadnia a hitelesítő adatait, amíg ki nem jelentkezik. Ez azt mutatja, hogy az egyszeri bejelentkezés működik.Írja be a készségbeléptetést az Emulátor mezőbe. A rendszer nem fogja kérni, hogy jelentkezzen be újra. Ehelyett megjelenik a SkillBot-jogkivonat.
Adja meg a képesség jogkivonatát a jogkivonat ismételt megjelenítéséhez.
Most már beírhatja a képességnaplót a kijelentkezéshez.
SkillBot
Ezután adja meg a kijelentkezés elemet a kijelentkezéshez.SimpleRootBoot
További információk
Az alábbi idősordiagram a cikkben használt mintákra vonatkozik, és a különböző érintett összetevők közötti interakciót mutatja be. Az ABS az Azure AI Bot Service-t jelenti.
- Az első alkalommal a felhasználó megadja a
login
RootBot parancsát. - A RootBot egy OAuthCardot küld, amely arra kéri a felhasználót, hogy jelentkezzen be.
- A felhasználó megadja az ABS-nek (Azure AI Bot Service) küldött hitelesítési hitelesítő adatokat.
- Az ABS elküldi a felhasználó hitelesítő adatai alapján létrehozott hitelesítési jogkivonatot a RootBotnak.
- A RootBot megjeleníti a felhasználó számára megjelenítendő gyökérjogkivonatot.
- A felhasználó megadja a
skill login
SkillBot parancsát. - A SkillBot OAuthCardot küld a RootBotnak.
- A RootBot egy cserélhető jogkivonatot kér az ABS-től.
- Az egyszeri bejelentkezés elküldi a SkillBot skill tokent a RootBotnak.
- A RootBot megjeleníti a felhasználó számára megjelenítendő képességkódot. Figyelje meg, hogy a képesség jogkivonata anélkül lett létrehozva, hogy a felhasználónak be kellene jelentkeznie az SKillBotba. Ennek oka az egyszeri bejelentkezés.
Az alábbi példa bemutatja, hogyan történik a tokencsere. A kód a TokenExchangeSkillHandler.cs fájlból származik.
private async Task<bool> InterceptOAuthCards(ClaimsIdentity claimsIdentity, Activity activity)
{
var oauthCardAttachment = activity.Attachments?.FirstOrDefault(a => a?.ContentType == OAuthCard.ContentType);
if (oauthCardAttachment != null)
{
var targetSkill = GetCallingSkill(claimsIdentity);
if (targetSkill != null)
{
var oauthCard = ((JObject)oauthCardAttachment.Content).ToObject<OAuthCard>();
if (!string.IsNullOrWhiteSpace(oauthCard?.TokenExchangeResource?.Uri))
{
using (var context = new TurnContext(_adapter, activity))
{
context.TurnState.Add<IIdentity>("BotIdentity", claimsIdentity);
// AAD token exchange
try
{
var result = await _tokenExchangeProvider.ExchangeTokenAsync(
context,
_connectionName,
activity.Recipient.Id,
new TokenExchangeRequest() { Uri = oauthCard.TokenExchangeResource.Uri }).ConfigureAwait(false);
if (!string.IsNullOrEmpty(result?.Token))
{
// If token above is null, then SSO has failed and hence we return false.
// If not, send an invoke to the skill with the token.
return await SendTokenExchangeInvokeToSkill(activity, oauthCard.TokenExchangeResource.Id, result.Token, oauthCard.ConnectionName, targetSkill, default).ConfigureAwait(false);
}
}
catch
{
// Show oauth card if token exchange fails.
return false;
}
return false;
}
}
}
}
return false;
}