Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Agentti käyttää OAuthia kirjautuakseen sisään ja saadakseen tokeneita alavirran resursseille (kuten Microsoft Graph) ilman, että se käsittelee tunnistetietoja itse. Azure Bot Service hallinnoi tunnuksen vaihtoa, ja agentti hakee käyttäjätunnuksen vuorolla.
Yleiskatsaus
OAuthin käyttö agentissa sisältää kolme toimintoa:
- Konfiguroi OAuth Azure Botissa ja sovelluksen rekisteröinti: Luo yksi tai useampi OAuth-yhteys Azure Bot -resurssiisi, jokainen Microsoft Entra ID -sovelluksen rekisteröinti tukena. Lisää käyttäjävaltuutus liittovaltion identiteetin avulla yleisimmän lähestymistavan. Myös muita tunnistetyyppejä, kuten asiakassalaisuuksia tai varmenteita, tuetaan. Täydelliset vaihtoehdot löytyvät kohdasta Bot Service -tunnistautumisen perusteet.
- Määritä vastaavuusasetukset agentissa: Jokainen Azure Botin OAuth-yhteys vastaa yhtä OAuth-käsittelijää agentin konfiguraatiossa. Katso Asetukset. Yleisistä agenttien asetuksista löytyy kohdasta Mikä on Microsoft 365 -agenttien SDK.
- Käytä tunnuksia koodissa: Vuoron aikana hae käyttäjätunnus – tai suorita On-Behalf-Of (OBO) -vaihto – agentin käyttäjävaltuutusrajapinnan kautta. Katso Käytä tunnusta koodissa (ei-OBO) ja Käytä tunnusta koodissa (OBO).
Pidä seuraavat ajatukset mielessä lukiessasi tämän artikkelin loppuosaa:
- Azure-botti voi sisältää useita OAuth-yhteyksiä. Esimerkiksi yksi yhteys Microsoft Graphille ja toinen GitHubille. Jokainen yhteys on konfiguroitu itsenäisesti Azure Botissa.
- Azure Botissa on 1:1-suhde OAuth-yhteyden ja agentin OAuth-käsittelijän välillä. Käsittelijän
AzureBotOAuthConnectionNameasetus nimeää Azure Botin yhteyden, jota se käyttää. Kahden yhteyden käyttämiseksi määritellään kaksi käsittelijää. - Agentin käyttäjävaltuutusrajapinta on pinta, jota kutsut koodissa. .NET:ssä tämä on
AgentApplication.UserAuthorization—esimerkiksiGetTurnTokenAsynctokenin lukemista jaExchangeTurnTokenAsyncOBO-vaihdon suorittamista. Vastaavat pinnat löytyvätauthorizationJavaScriptistä jaauthPythonista.
Työnäytteistä katso automaattisen kirjautumisen ja OBO-näytteet seuraavasti:
OAuth-kielituki
Agents SDK tukee OAuthia .NET:lle, JavaScriptille ja Pythonille. Ydinkäsitteet ovat samat kaikissa kielissä: OAuth-käsittelijät, ohjaajien liittäminen reitteihin ja OBO-vaihto. Vain konfiguraatiomuoto ja käsittelijän API-nimet eroavat:
| Language | Missä konfiguroit | API surface |
|---|---|---|
| .NET |
appsettings.json (tai koodi sisään Program.cs) |
AgentApplication.UserAuthorization |
| JavaScript |
.env ympäristömuuttujat |
AgentApplication.authorization |
| Python |
.env ympäristömuuttujat |
AgentApplication.auth |
JavaScriptissä ja Pythonissa avaimet .env käyttävät samoja hierarkkisia nimiä kuin .NET appsettings.json-rakenne, ja jokainen taso on erotettu kaksoisalaviivalla (__). JavaScript-avaimet säilyttävät taulukoissa esitetyt CaMelit (esim. azureBotOAuthConnectionName). Python-avaimet kirjoitetaan isoilla kirjaimet (esim. AZUREBOTOAUTHCONNECTIONNAME).
Tärkeää
Yleinen automaattinen kirjautuminen (AutoSignIn) ja DefaultHandlerName niitä tuetaan vain .NET-muodossa. JavaScriptissä ja Pythonissa liität OAuth-käsittelijät tiettyihin reitteihin, kuten on esitetty reittikohtaisessa konfiguraatiossa.
Asetukset
Käyttäjän käyttöoikeuksien myöntäminen sisältää AgentApplication-objektin, joka määrittää, miten agentti hankkii käyttäjien tunnuksia. Vähintään jokainen käsittelijä nimeää käyttämänsä Azure Bot OAuth -yhteyden. Seuraavat esimerkit osoittavat kunkin kielen minimirakenteen.
Seuraavat taulukot kuvaavat loput saatavilla olevat ominaisuudet, ja OBO-osiot kattavat OBOConnectionName- ja OBOScopes -asetukset.
.NET:ssä, konfiguroi käyttäjän valtuutus kohdassa AgentApplication :appsettings.json
"AgentApplication": {
"UserAuthorization": {
"DefaultHandlerName": "{{handler-name}}",
"AutoSignIn": true | false,
"Handlers": {
"{{handler-name}}": {
"Settings": {
"AzureBotOAuthConnectionName": "{{azure-bot-connection-name}}"
}
}
}
}
}
JavaScriptissä määritä käyttäjän valtuutus ympäristömuuttujilla tiedostossa .env :
# Connection used to authenticate the agent itself
connections__serviceConnection__settings__clientId=
connections__serviceConnection__settings__clientSecret=
connections__serviceConnection__settings__tenantId=
connectionsMap__0__connection=serviceConnection
connectionsMap__0__serviceUrl=*
# OAuth handler named "{{handler-name}}"
AgentApplication__UserAuthorization__Handlers__{{handler-name}}__Settings__azureBotOAuthConnectionName={{azure-bot-connection-name}}
Pythonissa määritä käyttäjän valtuutus ympäristömuuttujilla tiedostossa .env :
# Connection used to authenticate the agent itself
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID=
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET=
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID=
# OAuth handler named "{{handler-name}}"
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__{{handler-name}}__SETTINGS__AZUREBOTOAUTHCONNECTIONNAME={{azure-bot-connection-name}}
UserAuthorization-ominaisuudet
Seuraavassa taulukossa on ylätason UserAuthorization -ominaisuudet, jotka määrittävät kunkin saapuvan aktiviteetin käsittelijöiden valintatavan ja tunnusten hankintatavan.
| Ominaisuus | Pakolliset | Type | Description |
|---|---|---|---|
DefaultHandlerName |
Ei (suositus) | Merkkijono | Vain .NET. Käsittelijän nimi, jota käytetään, kun AutoSignIn arvioinnin tulos on tosi eikä reittikohtaista ohitusta ole määritetty. |
AutoSignIn |
Ei | totuusarvo tai edustaja | Vain .NET. Jos arvo on tosi (oletus), agentti yrittää hankkia tunnuksen jokaiselle saapuvalle aktiviteetille. Suodata aktiviteettityyppejä korvaamalla se suorituspalvelussa Options.AutoSignIn-ominaisuudella. |
Handlers |
Kyllä (ainakin yksi) | objekti (sanakirja) | Käsittelijän nimen ja sen määrityksen yhdistämismääritys. Jokaisen avaimen on oltava yksilöllinen. |
Rajoita .NETissä aktiviteetteja, joita automaattinen kirjautuminen koskee, määritä seuraavankaltainen predikaatti: Options.AutoSignIn = (context, ct) => Task.FromResult(context.Activity.IsType(ActivityTypes.Message));. JavaScript ja Python eivät tue globaalia automaattista kirjautumista. Sen sijaan laajenna kirjautuminen liittämällä yksittäisiin reitteihin tietyt käsittelijänimet, kuten reittikohtaisissa esimerkeissä on esitetty.
Settings-ominaisuudet
Seuraavassa taulukossa käsitellään sisäkkäinen Settings-objekti, jota käytetään yksittäiseen OAuth-käsittelijässä ja joka hallitsee kirjautumiskortin esitystä, uudelleenyritystoimintaa, aikakatkaisuja ja valinnaista OBO-vaihtomääritystä.
| Ominaisuus | Pakolliset | Type | Description |
|---|---|---|---|
AzureBotOAuthConnectionName |
Kyllä | Merkkijono | Azure Bot -resurssissa määritetty OAuth-yhteyden nimi. |
OBOConnectionName |
Ei (vain OBO) | Merkkijono | Agenttien SDK-yhteyden nimi, jota käytetään OBO-tunnuksen vaihdossa. |
OBOScopes |
Ei (vain OBO) | string[] | OBO-vaihdon aikana pyydetyt vaikutusalueet. Jos jätetään OBOConnectionName-ominaisuudella, ExchangeTurnTokenAsync voidaan kutsua manuaalisesti. |
Title |
Ei | Merkkijono | Mukautetun sisäänkirjautumiskortin otsikko. Kirjautuminen palautuu oletusarvoisesti. |
Text |
Ei | Merkkijono | Kirjautumiskortin painiketeksti. Kirjaudu sisään palautuu oletusarvoisesti. |
InvalidSignInRetryMax |
Ei | int | Uudelleenyritysten enimmäismäärä, kun käyttäjä syöttää virheellisen koodin. Oletusarvo on 2. |
InvalidSignInRetryMessage |
Ei | Merkkijono | Sanoma näytetään, kun virheellinen koodi on syötetty. Oletusarvona on Virheellinen sisäänkirjautumiskoodi. Anna 6-numeroinen koodi. |
Timeout |
Ei | kokonaisluku (ms) | Millisekuntien määrä, ennen kuin käynnissä oleva kirjautumisyritys vanhentuu. Oletusarvo on 900 000 (15 minuuttia). |
Muistiinpano
AzureBotOAuthConnectionName, OBOConnectionName, OBOScopes, Title ja Text sovelletaan kaikkiin kolmeen kieleen (käyttäen kielikohtaista avainkoteloa, joka on kuvattu kohdassa Kielituki OAuthille).
InvalidSignInRetryMax, InvalidSignInRetryMessage, ja Timeout ovat .NET-asetuksia.
Mitä tyyppiä kannattaa käyttää?
Valitse skenaarioon sopiva menetelmä seuraavan taulukon avulla.
| Valinta | Milloin kannattaa käyttää |
|---|---|
| Automaattinen kirjautuminen (vain .NET) | Haluat, että jokainen saapuva aktiviteetti hankkii automaattisesti tunnukset, tai haluat suodatetun alijoukon (esimerkiksi vain viestit tai kaikki muut paitsi tapahtumat) toimittamalla predikaatin UserAuthorizationOptions.AutoSignIn-ominaisuuteen. Tuettu vain .NET-muodossa. |
| Reittikohtainen | Vain tietyt reitinkäsittelijät tarvitsevat tunnuksia tai eri reittien on käytettävä eri OAuth-yhteyksiä (ja siksi myös eri tunnuksia). Tämä vaihtoehto on ainoa JavaScriptissä ja Pythonissa. .NET:ssä se on lisättävä ja globaali automaattinen kirjautuminen. Jos molemmat on otettu käyttöön .NETissä, vuoro voi käyttää kummankin tunnuksia. |
Tunnuksen käyttö koodissa (muu kuin OBO)
Tässä osiossa näytetään, kuinka käyttäjätunnus, jonka Azure botti OAuth -yhteys palauttaa suoraan, voidaan noutaa ja sitä voidaan käyttää ilman OBO-vaihtoa. .NET:ssä voit käyttää globaaleja automaattisia kirjautumis- tai reittikohtaisia käsittelijöitä. JavaScript ja Python käyttävät vain reittikohtaisia käsittelijöitä. Toiminnonkäsittelijässäsi hae tunnus (GetTurnTokenAsync .NET-muodossa, authorization.getToken JavaScriptissä, auth.get_token Pythonissa) mahdollisimman myöhään, jotta SDK voi päivittää tunnuksen, jos se on lähellä vanhenemista. Seuraavat esimerkit havainnollistavat molempia tapoja.
Automaattinen kirjautuminen (vain .NET)
Muistiinpano
Yleinen automaattinen kirjautuminen DefaultHandlerName ja niitä tuetaan vain .NET-muodossa. JavaScriptissä ja Pythonissa käytä Per-route -konfiguraatiota.
Käytä tätä määritystä, kun yleisen automaattisen kirjautumisen on hankittava jokaisen saapuvan aktiviteetin tunnus ilman, että reittikohtaiset käsittelijät on määritettävä.
"AgentApplication": {
"UserAuthorization": {
"DefaultHandlerName": "auto",
"Handlers": {
"auto": {
"Settings": {
"AzureBotOAuthConnectionName": "teams_sso",
}
}
}
}
},
Agenttikoodisi näyttäisi suunnilleen tältä:
public class MyAgent : AgentApplication
{
[MessageRoute]
public async Task OnMessageAsync(ITurnContext turnContext, ITurnState turnState, CancellationToken cancellationToken)
{
var token = await UserAuthorization.GetTurnTokenAsync(turnContext);
// use the token
}
}
Reittikohtainen määritys
Käytä reittikohtaista määritystä, kun haluat tarkkarajaisen hallinnan; vain nimenomaisesti merkityt reitit hankkivat tunnuksia. Reittikohtaisella konfiguraatiolla on seuraavat edut:
- Se vähentää tarpeetonta tokenin hakemista.
- Se mahdollistaa eri reittien kohdistamisen erilaisiin OAuth-yhteyksiin (ja siten eri resursseihin tai laajuuksiin).
- Sen avulla voit yhdistää autentikoidut ja tunnistamattomat reitit saman agentin sisällä.
Seuraavassa esimerkissä yksi graph käsittelijä on liitetty vain viestin reittiin.
.NET:ssä globaali automaattinen kirjautuminen on poistettu käytöstä ja käsittelijä graph liitetään reittiin käyttämällä autoSignInHandlers.
"AgentApplication": {
"UserAuthorization": {
"AutoSignIn": false,
"Handlers": {
"graph": {
"Settings": {
"AzureBotOAuthConnectionName": "teams_sso",
}
}
}
}
},
Agenttikoodisi näyttäisi suunnilleen tältä:
public class MyAgent : AgentApplication
{
[MessageRoute(autoSignInHandlers: "graph")]
public async Task OnMessageAsync(ITurnContext turnContext, ITurnState turnState, CancellationToken cancellationToken)
{
var token = await UserAuthorization.GetTurnTokenAsync(turnContext, "graph");
// use the token
}
}
JavaScriptissä syötä reittirekisteröinnille viimeisenä argumenttina taulukko käsittelijöiden nimiä. Vain tämä reitti käynnistää käsittelijän graph kirjautumisen.
AgentApplication__UserAuthorization__Handlers__graph__Settings__azureBotOAuthConnectionName=teams_sso
AgentApplication__UserAuthorization__Handlers__graph__Settings__title=Graph Sign In
AgentApplication__UserAuthorization__Handlers__graph__Settings__text=Sign in with Microsoft Graph
Agenttikoodisi näyttäisi suunnilleen tältä:
class MyAgent extends AgentApplication {
constructor () {
super({ storage: new MemoryStorage() })
// the `graph` handler runs only for this route
this.onMessage('-me', this._profileRequest, ['graph'])
}
private _profileRequest = async (context, state) => {
const tokenResponse = await this.authorization.getToken(context, 'graph')
// use tokenResponse.token
}
}
Pythonissa syötä auth_handlers reitin suunnittelijalle. Vain tämä reitti käynnistää käsittelijän GRAPH kirjautumisen.
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__GRAPH__SETTINGS__AZUREBOTOAUTHCONNECTIONNAME=teams_sso
Agenttikoodisi näyttäisi suunnilleen tältä:
@AGENT_APP.message(re.compile(r"^/(me|profile)$", re.IGNORECASE), auth_handlers=["GRAPH"])
async def profile_request(context: TurnContext, state: TurnState) -> None:
token_response = await AGENT_APP.auth.get_token(context, "GRAPH")
# use token_response.token
Nouda tunnus vuoron aikana
Hae käyttäjätunnus aina kun tarvitset sitä vuoron aikana. Se voidaan kutsua useita kertoja. Kutsu sitä heti ennen käyttöä, jotta päivityslogiikka (tarvittaessa) käsitellään läpinäkyvästi.
| Language | Soita |
|---|---|
| .NET |
GetTurnTokenAsync(turnContext, handlerName) |
| JavaScript | authorization.getToken(context, handlerName) |
| Python | auth.get_token(context, handler_name) |
Tunnuksen käyttö koodissa (OBO)
OBO (On-Behalf-Of-vuo) perustuu siihen, että alkuperäinen käyttäjän kirjautuminen palauttaa vaihdettavan tunnuksen. Tämä edellyttää, että OAuth-yhteyden vaikutusalueisiin sisältyy myöhemmän vaiheen ohjelmointirajapinnan näyttämää vaikutusaluetta vastaava alue (jos esimerkiksi näytetty vaikutusalue on defaultScopes, määritetty vaikutusalue saattaa olla api://botid-{{clientId}}/defaultScopes). Agenttien SDK suorittaa sitten MSAL (Microsoftin todennuskirjasto) -vaihdon käyttämällä määritettyä yhteyttä, jonka OBOConnectionName tunnistaa, ja OBOScopes-luetteloa. Kun sekä OBOConnectionName että OBOScopes sisältyvät määritykseen, vaihto tapahtuu automaattisesti ja saat lopullisen vakiotunnuspuhelun avulla (GetTurnTokenAsync / getToken / get_token). Jos jompikumpi puuttuu, voit suorittaa vaihdon suorituspalvelussa (ExchangeTurnTokenAsync .NETissä, authorization.exchangeToken JavaScriptissä, auth.exchange_token Pythonissa), jolloin yhteys tai vaikutusalue voidaan määrittää dynaamisesti.
OBO määrityksessä
Käytä tätä toimintamallia, kun tiedät myöhemmin tulevan resurssin ja tarvittavat vaikutusalueet jo määrityshetkellä. Kun sekä OBOConnectionName että OBOScopes annetaan, SDK suorittaa automaattisesti OBO-vaihdon kirjautumisen aikana. Niinpä seuraavat vakiotunnuskutsut palauttavat OBO-tunnuksen suoraan ilman ylimääräistä suorituspalelukoodia.
"AgentApplication": {
"UserAuthorization": {
"AutoSignIn": false,
"Handlers": {
"graph": {
"Settings": {
"AzureBotOAuthConnectionName": "teams_sso",
"OBOConnectionName": "ServiceConnection",
"OBOScopes": [
"https://graph.microsoft.com/.default"
]
}
}
}
}
},
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "FederatedCredentials",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{TenantId}}",
"ClientId": "{{ClientId}}",
"FederatedClientId": "{{ManagedIdentityClientId}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
},
Agenttikoodisi näyttäisi suunnilleen tältä:
public class MyAgent : AgentApplication
{
[MessageRoute(autoSignInHandlers: "graph")]
public async Task OnMessageAsync(ITurnContext turnContext, ITurnState turnState, CancellationToken cancellationToken)
{
// returns the OBO token because OBOConnectionName and OBOScopes are configured
var token = await UserAuthorization.GetTurnTokenAsync(turnContext, "graph");
// use the token
}
}
JavaScriptissä määrittele OBO-yhteys yhteyksien kartassa ja viittaa siihen käsittelijältä oboConnectionName ja oboScopes.
# Agent's own connection
connections__serviceConnection__settings__clientId=
connections__serviceConnection__settings__clientSecret=
connections__serviceConnection__settings__tenantId=
# OBO connection
connections__oboConnection__settings__clientId=
connections__oboConnection__settings__clientSecret=
connections__oboConnection__settings__tenantId=
connectionsMap__0__connection=serviceConnection
connectionsMap__0__serviceUrl=*
connectionsMap__1__connection=oboConnection
connectionsMap__1__serviceUrl=obo
AgentApplication__UserAuthorization__Handlers__graph__Settings__azureBotOAuthConnectionName=teams_sso
AgentApplication__UserAuthorization__Handlers__graph__Settings__oboConnectionName=oboConnection
AgentApplication__UserAuthorization__Handlers__graph__Settings__oboScopes=https://graph.microsoft.com/.default
Agenttikoodisi näyttäisi suunnilleen tältä:
class MyAgent extends AgentApplication {
constructor () {
super({ storage: new MemoryStorage() })
this.onActivity('message', this._onMessage, ['graph'])
}
private _onMessage = async (context, state) => {
// returns the OBO token because oboConnectionName and oboScopes are configured
const tokenResponse = await this.authorization.getToken(context, 'graph')
// use tokenResponse.token
}
}
Pythonissa määrittele OBO-yhteys CONNECTIONS ja viittaa siihen käsittelijältä ja OBOCONNECTIONNAME ja OBOSCOPES.
# Agent's own connection
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID=
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET=
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID=
# OBO connection
CONNECTIONS__OBO__SETTINGS__CLIENTID=
CONNECTIONS__OBO__SETTINGS__CLIENTSECRET=
CONNECTIONS__OBO__SETTINGS__TENANTID=
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__GRAPH__SETTINGS__AZUREBOTOAUTHCONNECTIONNAME=teams_sso
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__GRAPH__SETTINGS__OBOCONNECTIONNAME=OBO
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__GRAPH__SETTINGS__OBOSCOPES=https://graph.microsoft.com/.default
Agenttikoodisi näyttäisi suunnilleen tältä:
@AGENT_APP.message(re.compile(r".*"), auth_handlers=["GRAPH"])
async def on_message(context: TurnContext, state: TurnState) -> None:
# returns the OBO token because OBOCONNECTIONNAME and OBOSCOPES are configured
token_response = await AGENT_APP.auth.get_token(context, "GRAPH")
# use token_response.token
OBO Exchange suorituksen aikana
Käytä suorituksenaikaista vaihtoa, kun et voi korjata alityönkulun resurssia, vaikutusaluetta tai yhteyttä konfiguraatiossa. Tämä tilanne tapahtuu esimerkiksi, kun laajuudet riippuvat vuokralaisesta, käyttäjäroolista tai ominaisuuslipusta. Tässä mallissa voit halutessasi konfiguroida OBO-yhteyden ja kutsua vaihtomenetelmän valitsemillasi tähtäimillä vuorohetkellä. Saat vaihdetun tunnuksen, jonka voit heti hakea.
Soita ExchangeTurnTokenAsynciin niiden tähtäinten kanssa, jotka päätät vuoron aikana.
"AgentApplication": {
"UserAuthorization": {
"AutoSignIn": false,
"Handlers": {
"graph": {
"Settings": {
"AzureBotOAuthConnectionName": "teams_sso",
"OBOConnectionName": "ServiceConnection"
}
}
}
}
},
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "FederatedCredentials",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{TenantId}}",
"ClientId": "{{ClientId}}",
"FederatedClientId": "{{ManagedIdentityClientId}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
},
Agenttikoodisi näyttäisi suunnilleen tältä:
public class MyAgent : AgentApplication
{
[MessageRoute(autoSignInHandlers: "graph")]
public async Task OnMessageAsync(ITurnContext turnContext, ITurnState turnState, CancellationToken cancellationToken)
{
var scopes = GetScopes();
var exchangedToken = await UserAuthorization.ExchangeTurnTokenAsync(turnContext, "graph", exchangeScopes: scopes);
// use the token
}
}
Soita authorization.exchangeToken niiden käsittelijöiden nimien ja vaikutusalueiden kanssa, jotka päätät vuoron aikana.
connections__oboConnection__settings__clientId=
connections__oboConnection__settings__clientSecret=
connections__oboConnection__settings__tenantId=
connectionsMap__1__connection=oboConnection
connectionsMap__1__serviceUrl=obo
AgentApplication__UserAuthorization__Handlers__graph__Settings__azureBotOAuthConnectionName=teams_sso
AgentApplication__UserAuthorization__Handlers__graph__Settings__oboConnectionName=oboConnection
Agenttikoodisi näyttäisi suunnilleen tältä:
class MyAgent extends AgentApplication {
constructor () {
super({ storage: new MemoryStorage() })
this.onActivity('message', this._onMessage, ['graph'])
}
private _onMessage = async (context, state) => {
const scopes = getScopes()
const exchangedToken = await this.authorization.exchangeToken(context, 'graph', { scopes })
// use exchangedToken.token
}
}
Soita auth.exchange_token niiden käsittelijöiden nimien ja vaikutusalueiden kanssa, jotka päätät vuoron aikana.
CONNECTIONS__MCS__SETTINGS__CLIENTID=
CONNECTIONS__MCS__SETTINGS__CLIENTSECRET=
CONNECTIONS__MCS__SETTINGS__TENANTID=
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__MCS__SETTINGS__AZUREBOTOAUTHCONNECTIONNAME=teams_sso
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__MCS__SETTINGS__OBOCONNECTIONNAME=MCS
Agenttikoodisi näyttäisi suunnilleen tältä:
@AGENT_APP.message(re.compile(r".*"), auth_handlers=["MCS"])
async def on_message(context: TurnContext, state: TurnState) -> None:
scopes = get_scopes()
token_response = await AGENT_APP.auth.exchange_token(context, scopes, "MCS")
# use token_response.token
Alueelliset OAuth-asetukset
Muiden kuin Yhdysvaltojen alueiden on päivitettävä agentin käyttämä tunnuspalvelun päätepiste.
Seuraavassa esimerkissä näkyy .NET-määritys. Lisää se seuraaviin appsettings.json:
"RestChannelServiceClientFactory": {
"TokenServiceEndpoint": "{{service-endpoint-uri}}"
}
Käytä service-endpoint-url-arvona sopiva arvo taulukosta, joka koskee julkisia pilvibottia, joissa tietojen sijainti on tietyllä alueella.
| URI | Alue |
|---|---|
https://europe.api.botframework.com |
Eurooppa |
https://unitedstates.api.botframework.com |
Yhdysvallat |
https://india.api.botframework.com |
Intia |