Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR: SDK v4
Den här artikeln visar hur du använder funktionen enkel inloggning (SSO) i en robot. För att göra det använder den här funktionen en konsumentrobot, även kallad rotroboten eller den överordnade roboten, för att interagera med en kunskaps- eller underordnad robot. Den här artikeln använder termerna rotrobot och kunskapsrobot.
Om du har stöd för enkel inloggning kan en användare logga in på rotroboten med hjälp av en identitetsprovider och behöver inte logga in igen när kontrollen skickas till en färdighet.
Rotrobotarna och kunskapsrobotarna är separata robotar som körs på potentiellt olika servrar, var och en med sitt eget separata minne och tillstånd. Mer information om färdigheter finns i Kunskapsöversikt och Implementera en färdighet. Mer information om användarautentisering finns i Grunderna för Bot Framework-autentisering, Användarautentisering och Lägg till autentisering i en robot.
Viktigt!
När du använder Azure AI Bot Service-autentisering med Webbchatt finns det några viktiga säkerhetsöverväganden som du måste tänka på. Mer information finns i avsnittet säkerhetsöverväganden i artikeln REST-autentisering.
Förutsättningar
- Kunskap om grunderna i roboten, hantera tillstånd och om enkel inloggning.
- Kunskap om dialogrutebiblioteket och hur du implementerar sekventiellt konversationsflöde och återanvändningsdialogrutor
- Kunskap om Azure- och OAuth 2.0-utveckling.
- Visual Studio 2019 eller senare för .NET.
- Enkel inloggning med enkel kunskapskonsument och kompetens i C#.
Om exemplet
Den här artikeln refererar till två robotar: RootBot och SkillBot. RootBot vidarebefordrar aktiviteter till SkillBot. De modellerar det här typiska kunskapsscenariot:
- En rotrobot anropar en eller flera kunskapsrobotar.
- Både rotrobotarna och kunskapsrobotarna implementerar den grundläggande autentisering som beskrivs i artikeln Lägg till autentisering i en robot .
- Användaren loggar in på rotroboten.
- På grund av enkel inloggning och att de redan är inloggade i rotroboten loggas de in på kunskapsroboten utan att användaren behöver interagera igen.
En översikt över hur Bot Framework hanterar autentisering finns i Användarautentisering. Bakgrundsinformation för enkel inloggning finns i Enkel inloggning.
RootBot stöder enkel inloggning. Den kommunicerar med SkillBot för användarens räkning, utan att användaren behöver autentiseras igen i _SkillBot.
För varje projekt i exemplet behöver du följande:
- Ett Microsoft Entra-ID-program för att registrera en robotresurs i Azure.
- Ett Microsoft Entra ID-identitetsproviderprogram för autentisering.
Kommentar
För närvarande stöds endast Microsoft Entra ID-identitetsprovidern .
Skapa Azure RootBot-resursen
- Skapa en Azure-robotresurs i Azure Portal för
RootBot
. Följ stegen som beskrivs i Skapa en Azure-robotresurs. - Kopiera och spara robotregistreringsappens ID och klienthemligheten.
Skapa Microsoft Entra-ID-identiteten för RootBot
Microsoft Entra ID är en molnidentitetstjänst som gör att du kan skapa program som loggar in användare på ett säkert sätt med hjälp av branschstandardprotokoll som OAuth2.0.
Skapa ett identitetsprogram för
RootBot
det som använder Microsoft Entra-ID för att autentisera användaren. Följ stegen som beskrivs i Skapa Microsoft Entra ID-identitetsprovidern.I den vänstra rutan väljer du Manifest.
Ange
accessTokenAcceptedVersion
till 2.Välj Spara.
I den vänstra rutan väljer du Exponera ett API.
I den högra rutan väljer du Lägg till ett omfång.
Längst till höger Lägg till ett omfångsavsnitt väljer du Spara och fortsätt.
I fönstret som visas, under Vem kan samtycka?, väljer du Administratörer och användare.
Ange återstående nödvändig information.
Välj Lägg till definitionsområde.
Kopiera och spara omfångsvärdet.
Skapa en OAuth-anslutningsinställning för RootBot
Skapa en Microsoft Entra-ID-anslutning i robotregistreringen
RootBot
och ange värden enligt beskrivningen i Microsoft Entra-ID och värdet som beskrivs nedan.Lämna Token Exchange-URL:en tom.
I rutan Omfång anger du det
RootBot
omfångsvärde som du sparade i föregående steg.Kommentar
Omfång innehåller den URL som användaren först loggar in i rotroboten, medan tokenutbytes-URL:en lämnas tom.
Anta till exempel att rotrobotappid är rootAppId och att kunskapsrobotappid är skillAppId. Rotrobotens omfång ser ut som api://rootAppId/customScope, som används för att logga in på användaren. Rotrobotens omfång utbyts sedan med api://skillAppId/customscope under enkel inloggning.
Kopiera och spara namnet på anslutningen.
Skapa Azure SkillBot-resursen
- Skapa en Azure-robotresurs i Azure Portal för
SkillBot
. Följ stegen som beskrivs i Skapa en Azure-robotresurs. - Kopiera och spara robotregistreringsappens ID och klienthemligheten.
Skapa Microsoft Entra ID-identiteten för SkillBot
Microsoft Entra ID är en molnidentitetstjänst som gör att du kan skapa program som loggar in användare på ett säkert sätt med hjälp av branschstandardprotokoll som OAuth2.0.
Skapa ett identitetsprogram för
SkillBot
som använder Microsoft Entra-ID för att autentisera roboten. Följ stegen som beskrivs i Skapa Microsoft Entra ID-identitetsprovidern.I den vänstra rutan väljer du Manifest.
Ange
accessTokenAcceptedVersion
till 2.Välj Spara.
I den vänstra rutan väljer du Exponera ett API.
I den högra rutan väljer du Lägg till ett omfång.
I avsnittet Lägg till omfång längst till höger väljer du Spara och fortsätt.
I fönstret som visas under Vem kan samtycka? väljer du Administratörer och användare.
Ange återstående nödvändig information.
Välj Lägg till definitionsområde.
Kopiera och spara omfångsvärdet.
Välj Lägg till ett klientprogram. I det längst till höger-avsnittet går du till rutan Klient-ID och anger rotrobotens identitetsapp-ID som du sparade tidigare. Kontrollera att du använder RootBot-identiteten och inte registreringsappens ID.
Kommentar
För klientprogram stöder Azure AI Bot Service inte enkel sing-on med Microsoft Entra ID B2C-identitetsprovidern.
Markera kryssrutan efter omfångsvärdet under Auktoriserat omfång.
Välj Lägg till program.
I navigeringsfönstret till vänster väljer du API-behörigheter. Det är en bra idé att uttryckligen ange API-behörigheterna för appen.
I den högra rutan väljer du Lägg till en behörighet.
Välj Microsoft API:er och sedan Microsoft Graph.
Välj Delegerade behörigheter och kontrollera att de behörigheter du behöver är markerade. Det här exemplet kräver de behörigheter som anges nedan.
Kommentar
Alla behörigheter som har markerats som ADMINISTRATÖRSMEDGIVANDE KRÄVS kräver att både en användare och en klientorganisationsadministratör loggar in.
- openid
- profil
- User.Read
- User.ReadBasic.All
Välj Lägg till behörigheter.
Skapa en OAuth-anslutningsinställning för SkillBot
Skapa en Microsoft Entra-ID-anslutning i robotregistreringen
SkillBot
och ange värden enligt beskrivningen i Microsoft Entra-ID och de värden som beskrivs nedan.I rutan Token Exchange URL anger du det
SkillBot
omfångsvärde som du sparade i föregående steg.I rutan Omfång anger du följande värden avgränsade med tomt utrymme:
profile
User.ReadBasic.All
User.Read
openid
.Kopiera och spara i en fil namnet på anslutningen.
Testa anslutningen
- Välj i anslutningsposten för att öppna anslutningen som du skapade.
- Välj Testa anslutning överst i fönstret Anslutningsinställning för tjänstleverantör.
- Första gången bör du öppna en ny webbläsarflik som visar de behörigheter som appen begär och uppmanar dig att acceptera.
- Välj Godkänn.
- Detta bör sedan omdirigera dig till en testanslutning till <sidan med ditt anslutningsnamn> Lyckades .
Mer information finns i översikten över Microsoft Entra-ID för utvecklare (v1.0) och Microsofts identitetsplattform (v2.0). Information om skillnaderna mellan v1- och v2-slutpunkterna finns i Varför uppdatera till Microsofts identitetsplattform (v2.0)?. Fullständig information finns i Microsofts identitetsplattform (tidigare Microsoft Entra-ID för utvecklare).
Förbereda exempelkoden
Du måste uppdatera filen i båda exemplen appsettings.json
enligt beskrivningen nedan.
Klona enkel inloggning med exempel på enkel kompetenskonsument och kunskap från GitHub-lagringsplatsen.
SkillBot
Öppna projektfilenappsettings.json
. Tilldela följande värden från den sparade filen:{ "MicrosoftAppId": "<SkillBot registration app ID>", "MicrosoftAppPassword": "<SkillBot registration password>", "ConnectionName": "<SkillBot connection name>", "AllowedCallers": [ "<RootBot registration app ID>" ] }
RootBot
Öppna projektfilenappsettings.json
. Tilldela följande värden från den sparade filen:{ "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" } ] }
Testa exemplen
Använd följande för testning:
RootBot
Kommandonlogin
tillåter användaren att logga in på Microsoft Entra ID-registreringen med hjälp avRootBot
. När du har loggat in tar SSO hand om inloggningen till denSkillBot
också. Användaren behöver inte logga in igen.token
visar användarens token.logout
loggar ut användaren frånRootBot
.
SkillBot
Kommandonskill login
RootBot
tillåter att logga inSkillBot
på , för användarens räkning. Användaren visas inte ett inloggningskort, om det redan är loggat in, såvida inte enkel inloggning misslyckas.skill token
visar användarens token frånSkillBot
.skill logout
loggar ut användaren frånSkillBot
Kommentar
Första gången användarna provar enkel inloggning på en färdighet kan de få ett OAuth-kort för att logga in. Detta beror på att de ännu inte har gett sitt medgivande till färdighetens Microsoft Entra-ID-app. För att undvika detta kan de bevilja administratörsmedgivande för alla grafbehörigheter som begärs av Microsoft Entra-ID-appen.
Om du inte redan har gjort det installerar du Bot Framework-emulatorn. Se även Felsöka med emulatorn.
Du måste konfigurera emulatorn för att robotexempelinloggningen ska fungera. Följ stegen nedan: som du ser i Konfigurera emulatorn för autentisering.
När du har konfigurerat autentiseringsmekanismen kan du utföra den faktiska robotexempletestningen.
Öppna lösningen i Visual Studio och konfigurera den
SSOWithSkills.sln
så att den börjar felsöka med flera processer.Börja felsöka lokalt på datorn. Observera att du har följande inställningar i
RootBot
projektfilenappsettings.json
:"SkillHostEndpoint": "http://localhost:3978/api/skills/" "SkillEndpoint": "http://localhost:39783/api/messages"
Kommentar
De här inställningarna innebär att, med båda
RootBot
ochSkillBot
körs på den lokala datorn. Emulatorn kommunicerar medRootBot
på port 3978 ochRootBot
kommunicerar medSkillBot
på port 39783. Så fort du börjar felsöka öppnas två standardfönster i webbläsaren. En på port 3978 och den andra på port 39783.Starta emulatorn.
När du ansluter till roboten anger du ditt
RootBot
registreringsapp-ID och lösenord.Skriv
hi
för att starta konversationen.Ange inloggning.
RootBot
Visar ett inloggningskort för AAD-autentisering.Välj Logga in. Popup-dialogrutan Bekräfta att öppna URL visas.
Välj Bekräfta. Du kommer att loggas in och
RootBot
token visas.Ange token för att visa token igen.
Nu är du redo att kommunicera med
SkillBot
. När du har signerat med behöverRootBot
du inte ange dina autentiseringsuppgifter igen förrän du har loggat ut. Detta visar att enkel inloggning fungerar.Ange kunskapsinloggning i rutan Emulator. Du uppmanas inte att logga in igen. I stället visas SkillBot-token.
Ange kunskapstoken för att visa token igen.
Nu kan du ange färdighetsutloggning för att logga ut från
SkillBot
. Ange sedan utloggning för att logga ut frånSimpleRootBoot
.
Ytterligare information
Följande tidssekvensdiagram gäller för de exempel som används i artikeln och visar interaktionen mellan de olika komponenter som ingår. ABS står för Azure AI Bot Service.
- Första gången anger
login
användaren kommandot för RootBot. - RootBot skickar ett OAuthCard som ber användaren att logga in.
- Användaren anger de autentiseringsuppgifter som skickas till ABS (Azure AI Bot Service).
- ABS skickar autentiseringstoken, som genereras baserat på användarens autentiseringsuppgifter, till RootBot.
- RootBot visar rottoken som användaren kan se.
- Användaren anger
skill login
kommandot för SkillBot. - SkillBot skickar ett OAuthCard till RootBot.
- RootBot ber om en utbytbar token från ABS.
- Enkel inloggning skickar SkillBot-kunskapstoken till RootBot.
- RootBot visar kunskapstoken som användaren kan se. Observera att kunskapstoken genererades utan att användaren behöver logga in på SKillBot. Detta beror på enkel inloggning.
I följande exempel visas hur tokenutbytet sker. Koden kommer från filen TokenExchangeSkillHandler.cs .
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;
}