Utbildning
Utbildningsväg
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Den här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
GÄLLER FÖR: SDK v4
Azure AI Bot Service v4 SDK underlättar utvecklingen av robotar som kan komma åt onlineresurser som kräver användarautentisering. Roboten behöver inte hantera autentiseringstoken eftersom Azure gör det åt dig att använda OAuth 2.0 för att generera en token baserat på varje användares autentiseringsuppgifter. Roboten använder den token som genereras av Azure för att få åtkomst till dessa resurser. På så sätt behöver användaren inte ange ID och lösenord till roboten för att få åtkomst till en säker resurs utan bara till en betrodd identitetsprovider.
En översikt över hur Bot Framework hanterar den här typen av autentisering finns i Användarautentisering.
Den här artikeln refererar till två exempel. En visar hur du hämtar en autentiseringstoken. Den andra är mer komplex och visar hur du kommer åt Microsoft Graph för användarens räkning. I båda fallen kan du använda Azure AD v1 eller v2 som identitetsprovider för att hämta en OAuth-token för roboten. Den här artikeln beskriver hur du:
När du har slutfört den här artikeln har du en robot som kan svara på några enkla uppgifter. I Microsoft Graph-exemplet kan du skicka ett e-postmeddelande, visa vem du är och kontrollera de senaste e-postmeddelandena. Du behöver inte publicera roboten för att testa OAuth-funktionerna. Roboten behöver dock ett giltigt Azure-app-ID och lösenord.
Anteckning
Bot Framework JavaScript-, C#- och Python-SDK:erna fortsätter att stödjas, men Java SDK dras tillbaka med slutligt långsiktigt stöd som slutar i november 2023.
Befintliga robotar som skapats med Java SDK fortsätter att fungera.
Om du vill skapa en ny robot kan du använda Microsoft Copilot Studio och läsa om hur du väljer rätt copilot-lösning.
Mer information finns i Framtiden för robotbygge.
Viktigt
Du måste använda Direct Line med förbättrad autentisering aktiverad för att minska säkerhetsriskerna när du ansluter till en robot med hjälp av Webbchatt kontroll. Mer information finns i Utökad direktlinjeautentisering.
Kunskap om grunderna i roboten, hantering av tillstånd, dialogrutebiblioteket och hur du implementerar sekventiellt konversationsflöde och hur du återanvänder dialogrutor.
Kunskap om Azure- och OAuth 2.0-utveckling.
Visual Studio 2017 eller senare för .NET.
Node.js för JavaScript.
Python 3.8+ för Python.
Ett av exemplen nedan.
Exempel | BotBuilder-version | Demonstrerar |
---|---|---|
Autentisering i C# eller JavaScript eller Java eller Python | v4 | OAuthCard-stöd |
Autentisering för Microsoft Graph i C# eller JavaScript eller Java eller Python | v4 | Stöd för Microsoft Graph API med OAuth 2.0 |
Autentisering för Microsoft Teams i C# eller JavaScript eller Java eller Python | v4 | Stöd för Microsoft Graph API med OAuth 2.0 |
Om du vill köra exemplen som refereras i den här artikeln behöver du:
Viktigt
När du registrerar en robot i Azure tilldelas den ett Microsoft Entra-ID-program. Det här programmet skyddar dock kanal-till-robot-åtkomst. Du behöver ytterligare ett Microsoft Entra-ID-program för varje externt skyddad resurs som du vill att roboten ska få åtkomst till för användarens räkning.
Skapa Azure Bot-resursen så att du kan registrera din robot med Azure AI Bot Service.
Tips
Det går inte att skapa nya registreringsresurser för webbappsrobotar och robotkanaler . Alla befintliga resurser som är konfigurerade och distribuerade fortsätter dock att fungera. Robotar som skapats från en VSIX- eller Yeoman-mall från SDK version 4.14.1.2 eller senare innehåller ARM-mallar som genererar en Azure Bot-resurs.
Gå till Azure-portalen.
I den högra rutan väljer du Skapa en resurs.
I sökrutan anger du bot
och trycker sedan på Retur.
Välj Azure Bot-kortet.
Välj Skapa.
Ange värden i de obligatoriska fälten och granska och uppdatera inställningarna.
Ange information under Projektinformation. Välj om din robot ska ha global eller lokal dataplacering. För närvarande är funktionen för lokal dataresidens tillgänglig för resurser i regionerna "westeurope" och "centralindia". Mer information finns i Regionalisering i Azure AI Bot Service.
Ange information under Microsoft App-ID. Välj hur robotidentiteten ska hanteras i Azure och om du vill skapa en ny identitet eller använda en befintlig.
Välj Granska + skapa.
Om valideringen godkänns väljer du Skapa.
När distributionen är klar väljer du Gå till resurs. Du bör se roboten och relaterade resurser i den resursgrupp som du har valt.
Om du inte redan har Bot Framework SDK väljer du Ladda ned från GitHub för att lära dig hur du använder paketen för önskat språk.
Nu är du redo att skapa din robot med Bot Framework SDK.
Tips
När Azure skapar en ny Azure Bot-resurs med en enda klientorganisation eller flera klientorganisationer med ett nytt app-ID genereras även ett lösenord.
Följ de här stegen för att lägga till identitetsinformation i robotens konfigurationsfil. Filen skiljer sig beroende på vilket programmeringsspråk du använder för att skapa roboten.
Viktigt
Java-versionen av Bot Framework SDK stöder bara robotar för flera användare. C#-, JavaScript- och Python-versionerna stöder alla tre programtyperna för att hantera robotens identitet.
Språk | Filnamn | Anteckningar |
---|---|---|
C# | appsettings.json | Stöder alla tre programtyperna för att hantera robotens identitet. |
JavaScript | .env | Stöder alla tre programtyperna för att hantera robotens identitet. |
Java | application.properties | Stöder endast botar för flera klienter. |
Python | config.py | Stöder alla tre programtyperna för att hantera robotens identitet. |
Identitetsinformationen som du behöver lägga till beror på robotens programtyp. Ange följande värden i konfigurationsfilen.
Tillgänglig för C#-, JavaScript- och Python-robotar.
Egendom | Värde |
---|---|
MicrosoftAppType |
UserAssignedMSI |
MicrosoftAppId |
Klient-ID för den användartilldelade hanterade identiteten. |
MicrosoftAppPassword |
Ej tillämpbart. Lämna detta tomt för en användartilldelad hanterad identitetsrobot. |
MicrosoftAppTenantId |
Tenant-ID för den användartilldelade hanterade identiteten. |
Om du har en befintlig App Service-resurs (webbapp) för din robot och roboten är ett användartilldelat program för hanterad identitet kan du behöva uppdatera robotens apptjänst:
Välj din prenumeration.
För Användartilldelade hanterade identiteter väljer du den hanterade identiteten för din robot. Om den hanterade identiteten genererades automatiskt åt dig har den samma namn som roboten.
Välj Lägg till för att använda den här identiteten för din robot.
Så här hämtar du robotens app- eller klient-ID:
Robotar i en enkel- och fleranvändarmiljö har en programhemlighet eller ett lösenord som du behöver för vissa operationer. Azure AI Bot Service döljer din robothemlighet. Ägaren till robotens App Service-resurs kan dock generera ett nytt lösenord:
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 OAuth 2.0.
Du kan använda någon av dessa två identitetstjänster:
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).
Det här avsnittet visar hur du skapar en Microsoft Entra ID-identitetsprovider som använder OAuth 2.0 för att autentisera roboten. Du kan använda Azure AD v1- eller Microsoft Entra-ID-slutpunkter.
Tips
Du måste skapa och registrera Microsoft Entra-ID-programmet i en klientorganisation där du kan samtycka till att delegera behörigheter som begärs av ett program.
Öppna microsoft entra-ID-panelen i Azure Portal. Om du inte är i rätt klient väljer du Växla mapp för att växla till rätt klient. (Information om hur du skapar en klient finns i Öppna portalen och skapa en klient.)
Öppna panelen Appregistreringar.
I panelen Appregistreringar väljer du Ny registrering.
Fyll i de obligatoriska fälten och skapa appregistreringen.
Namnge ditt program.
Välj kontotyper som stöds för ditt program. (Något av dessa alternativ fungerar med det här exemplet.)
För omdirigerings-URI väljer du Webb och anger URL:en till en av de OAuth-omdirigerings-URL:er som stöds.
Välj Registrera.
I navigeringsfönstret väljer du Certifikat och hemligheter för att skapa en hemlighet för ditt program.
bot login
.I navigeringsfönstret väljer du API-behörigheter för att öppna panelen API-behörigheter . Det är en bra idé att uttryckligen ange API-behörigheterna för appen.
Välj Lägg till en behörighet för att visa Begär API-behörigheter-fönstret.
I det här exemplet väljer du Microsoft API:er och Microsoft Graph.
Välj Delegerade behörigheter och kontrollera att de behörigheter du behöver är markerade. Det här exemplet kräver dessa behörigheter.
Anteckning
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, så för din robot tenderar att hålla sig borta från dessa.
Välj Lägg till behörigheter. (Första gången en användare får åtkomst till den här appen via roboten måste de bevilja medgivande.)
Nu har du konfigurerat ett Microsoft Entra-ID-program.
Anteckning
Du tilldelar Applikations-ID (klient) och klienthemligheten när du skapar anslutningssträngen och registrerar identitetsprovidern med robotens registrering. Se nästa avsnitt.
Nästa steg är att registrera din identitetsleverantör med din bot.
Öppna robotens Resurssida för Azure Bot i Azure Portal.
Välj Inställningar.
Under OAuth-anslutningsinställningar längst ned på sidan väljer du Lägg till inställning.
Fyll i formuläret på följande sätt:
Namn. Ange ett namn för anslutningen. Du använder den i robotkoden.
Tjänstleverantör. Välj Microsoft Entra-ID för att visa Microsoft Entra ID-specifika fält.
Klient-ID. Ange det program-ID (klient)-ID som du registrerade för din Microsoft Entra ID-identitetsprovider.
Klienthemlighet. Ange hemligheten som du registrerade för din Microsoft Entra ID-identitetsprovider.
Tips
Om du vill använda certifikat kan du välja AAD v2 med certifikatprovidern . Du måste ge Bot Service Token Store (appid: 00001111-aaaa-2222-bbbb-3333cccc4444) behörighet att hämta certifikatet.
Token Exchange URL. Lämna det tomt eftersom det endast används för enkel inloggning i Microsoft Entra-ID.
Hyresgäst-ID. Ange det katalog-ID (klient)-ID som du registrerade tidigare för din Microsoft Entra-ID-app eller vanligt beroende på vilka kontotyper som stöds som valdes när du skapade Azure DD-appen. Följ dessa kriterier för att bestämma vilket värde som ska tilldelas:
common
i stället för ett klient-ID. Annars verifierar Microsoft Entra-ID-appen via klientorganisationen vars ID har valts och exkluderar personliga Microsoft-konton.Det här är den klient som är associerad med de användare som kan verifieras. För mer information, se Tenancy i Microsoft Entra ID.
För Omfång anger du namnen på de behörigheter som du valde från applikationsregistreringen. I testsyfte kan du bara ange: openid profile
.
Anteckning
För Microsoft Entra ID tar fältet Scopes en skiftlägeskänslig, utrymmesavgränsad lista med värden.
Välj Spara.
Anteckning
Dessa värden gör att ditt program kan komma åt Office 365-data via Microsoft Graph API. Token Exchange-URL:en bör också lämnas tom eftersom den endast används för enkel inloggning i Microsoft Entra-ID.
Du kan nu använda det här anslutningsnamnet i robotkoden för att hämta användartoken.
Du behöver robotens app-ID och lösenord för att slutföra den här processen.
Klona från GitHub-lagringsplatsen det exempel som du vill arbeta med: Robotautentisering eller robotautentisering för Microsoft Graph.
Uppdatera appsettings.json:
Ange ConnectionName
namnet på den OAuth-anslutningsinställning som du lade till i roboten.
Ange MicrosoftAppId
och MicrosoftAppPassword
till robotens app-ID och apphemlighet.
Beroende på tecknen i robothemligheten kan du behöva undvika lösenordet för XML. Till exempel måste alla ampersander (&) kodas som
{
"MicrosoftAppType": "",
"MicrosoftAppId": "",
"MicrosoftAppPassword": "",
"MicrosoftAppTenantId": "",
"ConnectionName": ""
}
Om du vill använda OAuth i roboten med datahemvist i det offentliga molnet måste du lägga till följande konfigurationer i dina apparinställningar
"OAuthUrl": "<Regional-OAuth-Uri>",
"ToChannelFromBotOAuthScope": "https://api.botframework.com",
"ToChannelFromBotLoginUrlTemplate": "https://api.botframework.com",
"PublicAzureChannel": "https://api.botframework.com",
"ToBotFromChannelOpenIdMetadataUrl": "https://login.botframework.com/v1/.well-known/openidconfiguration",
"ToBotFromEmulatorOpenIdMetadataUrl": "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration",
"ToBotFromChannelTokenIssuer": "https://api.botframework.com",
"ToChannelFromBotLoginUrl": "https://login.microsoftonline.com/botframework.com",
Där <Regional-OAuth-Url> är en av följande URI:er:
URI | beskrivning |
---|---|
https://europe.api.botframework.com |
För offentliga molnrobotar med datahemvist i Europa. |
https://unitedstates.api.botframework.com |
För offentliga molnrobotar med datahemvist i USA. |
https://india.api.botframework.com |
För offentliga molnrobotar med datahemvist i Indien. |
Uppdatera Startup.cs:
Om du vill använda OAuth i icke-offentliga Azure-moln, till exempel myndighetsmolnet, måste du lägga till följande kod i filen Startup.cs .
string uri = "<uri-to-use>";
MicrosoftAppCredentials.TrustServiceUrl(uri);
OAuthClientConfig.OAuthEndpoint = uri;
Där <uri-to-use> är en av följande URI:er:
URI | beskrivning |
---|---|
https://api.botframework.azure.us |
För amerikanska regeringsmoln-botar som saknar datahemvist. |
https://api.botframework.com |
För offentliga molnrobotar utan datahemvist. Detta är standard-URI:n och kräver ingen ändring av Startup.cs. |
Information om hur du hämtar microsofts app-ID och lösenordsvärden för Microsoft-appar finns i Hämta registreringslösenord.
Anteckning
Du kan nu publicera den här robotkoden till din Azure-prenumeration (högerklicka i projektet och välj Publicera), men det är inte nödvändigt för den här artikeln. Du skulle behöva konfigurera en publiceringskonfiguration som använder programmet och värdplanen som du använde när du konfigurerade roboten i Azure Portal.
Om du inte redan har gjort det installerar du Bot Framework-emulatorn. Se även Felsöka med emulatorn.
För att robotexemplet ska fungera måste du konfigurera emulatorn enligt beskrivningen i Konfigurera emulatorn för autentisering.
När du har konfigurerat autentiseringsmekanismen kan du utföra den faktiska robotexempletestningen.
Anteckning
Du kan bli ombedd att ange en magisk kod på grund av hur bott-exemplet är implementerat. Den här magiska koden är en del av RFC#7636 och finns där för att lägga till ett extra säkerhetselement. Genom att ta bort den magiska koden finns det en ökad säkerhetsrisk. Detta kan minimeras med hjälp av Direct Line med förbättrad autentisering aktiverad. Mer information finns i Förbättrad autentisering i Bot Framework.
appsettings.json
i filen eller .env
. I emulatorn tilldelar du dessa värden i konfigurationsfilen eller första gången du ansluter till roboten.help
för att se en lista över tillgängliga kommandon för roboten och testa autentiseringsfunktionerna.logout
.Anteckning
Robotautentisering kräver användning av Bot Connector-tjänsten. Tjänsten kommer åt information från din Azure Bot-resurs.
I exemplet med robotautentisering är dialogrutan utformad för att hämta användartoken när användaren har loggat in.
I robotautentiseringen för Microsoft Graph-exemplet är dialogrutan utformad för att acceptera en begränsad uppsättning kommandon när användaren har loggat in.
När en användare ber roboten att göra något som kräver att roboten har användaren inloggad kan roboten använda en OAuthPrompt
för att initiera hämtning av en token för en viss anslutning.
OAuthPrompt
Skapar ett flöde för tokenhämtning som består av:
OAuthCard
som är en inloggningsknapp som användaren kan välja på.OAuthCard
skickar Azure AI Bot Service antingen roboten användarens token direkt eller presenterar användaren med en 6-siffrig autentiseringskod som ska anges i chattfönstret.I följande avsnitt beskrivs hur exemplet implementerar några vanliga autentiseringsuppgifter.
Dialogs\MainDialog.cs
Lägg till en OAuth-prompt till MainDialog i konstruktorn. Här hämtades värdet för anslutningsnamnet från filen appsettings.json .
AddDialog(new OAuthPrompt(
nameof(OAuthPrompt),
new OAuthPromptSettings
{
ConnectionName = ConnectionName,
Text = "Please Sign In",
Title = "Sign In",
Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
}));
I ett dialogsteg använder du BeginDialogAsync
för att starta OAuth-prompten, som ber användaren att logga in.
return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);
I följande dialogsteg kontrollerar du om det finns en token i resultatet från föregående steg. Om den inte är null har användaren loggat in.
// Get the token from the previous step. Note that we could also have gotten the
// token directly from the prompt itself. There is an example of this in the next method.
var tokenResponse = (TokenResponse)stepContext.Result;
När du startar en OAuth-fråga väntar den på en tokensvarshändelse, från vilken användarens token hämtas.
Bots\AuthBot.cs
AuthBot härleder från ActivityHandler
och hanterar uttryckligen händelseaktiviteter för tokensvar. Här fortsätter vi den aktiva dialogrutan, vilket gör att OAuth-prompten kan bearbeta händelsen och hämta token.
protected override async Task OnTokenResponseEventAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
Logger.LogInformation("Running dialog with Token Response Event Activity.");
// Run the Dialog with the new Token Response Event Activity.
await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}
Det är en bra praxis att låta användarna uttryckligen logga ut, i stället för att förlita sig på anslutningens timeout.
Dialogrutor\LogoutDialog.cs
private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
if (innerDc.Context.Activity.Type == ActivityTypes.Message)
{
var text = innerDc.Context.Activity.Text.ToLowerInvariant();
if (text == "logout")
{
// The UserTokenClient encapsulates the authentication processes.
var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, ConnectionName, innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false);
await innerDc.Context.SendActivityAsync(MessageFactory.Text("You have been signed out."), cancellationToken);
return await innerDc.CancelAllDialogsAsync(cancellationToken);
}
}
return null;
}
OAuth hanteras annorlunda i Teams än i andra kanaler. Exempel på Teams-autentiseringsrobot (i C#, JavaScript, Java eller Python) visar hur du implementerar autentisering för Teams korrekt.
Utbildning
Utbildningsväg
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization