Ověřování pomocí rozhraní API Připojení oru robota

Váš robot komunikuje se službou bot Připojení or pomocí protokolu HTTP přes zabezpečený kanál (SSL/TLS). Když robot odešle žádost službě Připojení or, musí obsahovat informace, které může služba Připojení or použít k ověření své identity. Podobně když služba Připojení or odešle žádost robotovi, musí obsahovat informace, které může robot použít k ověření své identity. Tento článek popisuje technologie ověřování a požadavky na ověřování na úrovni služby, které probíhá mezi robotem a službou robota Připojení or. Pokud píšete vlastní ověřovací kód, musíte implementovat postupy zabezpečení popsané v tomto článku, aby robot mohl vyměňovat zprávy se službou Robot Připojení or.

Důležité

Pokud píšete vlastní ověřovací kód, je důležité, abyste správně implementovali všechny bezpečnostní postupy. Implementací všech kroků v tomto článku můžete zmírnit riziko, že útočník dokáže číst zprávy odeslané robotovi, odesílat zprávy, které zosobňují robota, a ukrást tajné klíče.

Pokud používáte sadu SDK služby Bot Framework, nemusíte implementovat postupy zabezpečení popsané v tomto článku, protože sada SDK ji automaticky provede za vás. Jednoduše nakonfigurujte projekt s ID aplikace a heslem, které jste získali pro robota během registrace , a sada SDK zpracuje zbytek.

Technologií ověřování

K navázání důvěryhodnosti mezi robotem a Připojení orem robota se používají čtyři technologie ověřování:

Technologie Popis
SSL/TLS Protokol SSL/TLS se používá pro všechna připojení mezi službami. X.509v3 certifikáty slouží k vytvoření identity všech služeb HTTPS. Klienti by měli vždy kontrolovat certifikáty služeb, aby měli jistotu, že jsou důvěryhodné a platné. (Klientské certifikáty se nepoužívají jako součást tohoto schématu.)
OAuth 2.0 OAuth 2.0 používá přihlašovací službu účtu Microsoft Entra ID k vygenerování zabezpečeného tokenu, který robot může použít k odesílání zpráv. Tento token je token typu service-to-service; Nevyžaduje se žádné přihlášení uživatele.
Webový token JSON (JWT) Webové tokeny JSON slouží ke kódování tokenů odesílaných do a z robota. Klienti by měli plně ověřit všechny tokeny JWT, které obdrží, podle požadavků uvedených v tomto článku.
Metadata OpenID Služba Bot Připojení or publikuje seznam platných tokenů, které používá k podepisování vlastních tokenů JWT k metadatům OpenID v dobře známém statickém koncovém bodu.

Tento článek popisuje, jak tyto technologie používat prostřednictvím standardního protokolu HTTPS a JSON. Nejsou vyžadovány žádné speciální sady SDK, i když možná zjistíte, že pomocné rutiny pro OpenID a další jsou užitečné.

Ověřování požadavků z robota do služby robota Připojení or

Pokud chcete komunikovat se službou Robot Připojení or, musíte v hlavičce každého požadavku rozhraní API zadat přístupový token Authorization pomocí tohoto formátu:

Authorization: Bearer ACCESS_TOKEN

Získání a použití tokenu JWT pro robota:

  1. Robot odešle požadavek GET HTTP do přihlašovací služby MSA.
  2. Odpověď ze služby obsahuje token JWT, který se má použít.
  3. Váš robot obsahuje tento token JWT do autorizační hlavičky v požadavcích na službu Bot Připojení or.

Krok 1: Žádost o přístupový token ze služby přihlášení účtu Microsoft Entra ID

Důležité

Pokud jste to ještě neudělali, musíte robota zaregistrovat ve službě Bot Framework, abyste získali id aplikace a heslo. K vyžádání přístupového tokenu potřebujete ID a heslo robota.

Identitu robota je možné spravovat v Azure několika různými způsoby.

  • Jako spravovaná identita přiřazená uživatelem, takže nemusíte spravovat přihlašovací údaje robota sami.
  • Jako aplikace s jedním tenantem.
  • Jako aplikace s více tenanty .

Vyžádání přístupového tokenu na základě typu aplikace vašeho robota

Pokud chcete požádat o přístupový token z přihlašovací služby, zadejte následující požadavek a nahraďte MICROSOFT-APP-ID a MICROSOFT-APP-PASSWORD id a heslo robota, které jste získali při registraci robota ve službě Bot Service.

POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=MICROSOFT-APP-ID&client_secret=MICROSOFT-APP-PASSWORD&scope=https%3A%2F%2Fapi.botframework.com%2F.default

Krok 2: Získání tokenu JWT z odpovědi přihlašovací služby účtu Microsoft Entra ID

Pokud je vaše aplikace autorizována přihlašovací službou, text odpovědi JSON určí váš přístupový token, jeho typ a vypršení platnosti (v sekundách).

Při přidávání tokenu do Authorization hlavičky požadavku je nutné použít přesnou hodnotu zadanou v této odpovědi – neuchovávejte nebo kódujte hodnotu tokenu. Přístupový token je platný až do vypršení jeho platnosti. Pokud chcete zabránit vypršení platnosti tokenu v dopadu na výkon robota, můžete se rozhodnout token uložit do mezipaměti a proaktivně ho aktualizovat.

Tento příklad ukazuje odpověď z přihlašovací služby účtu Microsoft Entra ID:

HTTP/1.1 200 OK
... (other headers)
{
    "token_type":"Bearer",
    "expires_in":3600,
    "ext_expires_in":3600,
    "access_token":"eyJhbGciOiJIUzI1Ni..."
}

Krok 3: Zadání tokenu JWT v autorizační hlavičce požadavků

Když do služby robota Připojení or odešlete požadavek rozhraní API, zadejte přístupový token v Authorization hlavičce požadavku pomocí tohoto formátu:

Authorization: Bearer ACCESS_TOKEN

Všechny požadavky, které odešlete do služby Robot Připojení or, musí obsahovat přístupový token v Authorization hlavičce. Pokud je token správně vytvořený, nevypršela platnost a vygenerovala se přihlašovací službou účtu Microsoft Entra ID, služba robota Připojení or žádost autorizuje. Provádí se další kontroly, které zajistí, že token patří robotovi, který požadavek odeslal.

Následující příklad ukazuje, jak zadat přístupový token v Authorization hlavičce požadavku.

POST https://smba.trafficmanager.net/teams/v3/conversations/12345/activities
Authorization: Bearer eyJhbGciOiJIUzI1Ni...

(JSON-serialized Activity message goes here)

Důležité

V hlavičce požadavků, které odešlete do služby robota Připojení or, zadejte pouze token Authorization JWT. Neodesílejte token přes nezabezpečené kanály a nezahrnujte ho do požadavků HTTP, které odesíláte do jiných služeb. Token JWT, který získáte z přihlašovací služby účtu Microsoft Entra ID, je jako heslo a měl by být zpracován s velkou opatrností. Každý, kdo má token, ho může použít k provádění operací jménem vašeho robota.

Robot pro Připojení or: příklady komponent JWT

header:
{
  typ: "JWT",
  alg: "RS256",
  x5t: "<SIGNING KEY ID>",
  kid: "<SIGNING KEY ID>"
},
payload:
{
  aud: "https://api.botframework.com",
  iss: "https://sts.windows.net/d6d49420-f39b-4df7-a1dc-d59a935871db/",
  nbf: 1481049243,
  exp: 1481053143,
  appid: "<YOUR MICROSOFT APP ID>",
  ... other fields follow
}

Poznámka:

Skutečná pole se můžou v praxi lišit. Vytvořte a ověřte všechny tokeny JWT, jak je uvedeno výše.

Ověřování požadavků ze služby robota Připojení or do robota

Když robot Připojení orová služba odešle žádost robotovi, určí v Authorization hlavičce požadavku podepsaný token JWT. Robot může ověřovat volání ze služby Robot Připojení or tím, že ověří pravost podepsaného tokenu JWT.

Ověření volání ze služby robota Připojení oru:

  1. Váš robot získá token JWT z autorizační hlavičky v požadavcích odeslaných ze služby Robot Připojení or.
  2. Robot získá dokument metadat OpenID pro službu bot Připojení or.
  3. Robot získá seznam platných podpisových klíčů z dokumentu.
  4. Váš robot ověří pravost tokenu JWT.

Krok 2: Získání dokumentu metadat OpenID

Dokument metadat OpenID určuje umístění druhého dokumentu se seznamem platných podpisových klíčů služby Bot Připojení or. Pokud chcete získat dokument metadat OpenID, zadejte tento požadavek prostřednictvím protokolu HTTPS:

GET https://login.botframework.com/v1/.well-known/openidconfiguration

Tip

Jedná se o statickou adresu URL, kterou můžete pevně zakódovat do aplikace.

Následující příklad ukazuje dokument metadat OpenID vrácený v reakci na GET požadavek. Vlastnost jwks_uri určuje umístění dokumentu, který obsahuje platné podpisové klíče služby Bot Připojení or.

{
    "issuer": "https://api.botframework.com",
    "authorization_endpoint": "https://invalid.botframework.com",
    "jwks_uri": "https://login.botframework.com/v1/.well-known/keys",
    "id_token_signing_alg_values_supported": [
      "RS256"
    ],
    "token_endpoint_auth_methods_supported": [
      "private_key_jwt"
    ]
}

Krok 3: Získání seznamu platných podpisových klíčů

Pokud chcete získat seznam platných podpisových klíčů, vyžádejte GET požadavek prostřednictvím protokolu HTTPS na adresu URL určenou jwks_uri vlastností v dokumentu metadat OpenID. Příklad:

GET https://login.botframework.com/v1/.well-known/keys

Text odpovědi určuje dokument ve formátu JWK, ale také obsahuje další vlastnost pro každý klíč: endorsements.

Tip

Seznam klíčů je stabilní a může se uložit do mezipaměti, ale nové klíče se můžou kdykoli přidat. Aby se zajistilo, že váš robot má před používáním těchto klíčů aktuální kopii dokumentu, všechny instance robota by měly aktualizovat místní mezipaměť dokumentu alespoň jednou za 24 hodin.

Vlastnost endorsements v rámci každého klíče obsahuje jeden nebo více ověřovacích řetězců, které můžete použít k ověření, že ID kanálu zadané ve vlastnosti v channelId rámci objektu Aktivity příchozího požadavku je autentické. Seznam ID kanálů, které vyžadují doporučení, je možné konfigurovat v rámci každého robota. Ve výchozím nastavení se zobrazí seznam všech ID publikovaných kanálů, i když vývojáři robotů můžou přepsat hodnoty ID vybraného kanálu v obou směrech.

Krok 4: Ověření tokenu JWT

Pokud chcete ověřit pravost tokenu odeslaného službou Bot Připojení or, musíte token extrahovat z Authorization hlavičky požadavku, parsovat token, ověřit jeho obsah a ověřit jeho podpis.

Knihovny parsování JWT jsou k dispozici pro mnoho platforem a většina implementuje zabezpečené a spolehlivé analýzy tokenů JWT, i když je nutné tyto knihovny obvykle nakonfigurovat tak, aby určité vlastnosti tokenu (jeho vystavitel, cílová skupina atd.) obsahovaly správné hodnoty. Při analýze tokenu musíte nakonfigurovat knihovnu parsování nebo napsat vlastní ověření, abyste zajistili, že token splňuje tyto požadavky:

  1. Token byl odeslán v hlavičce HTTP Authorization se schématem Bearer.
  2. Token je platný JSON, který odpovídá standardu JWT.
  3. Token obsahuje deklaraci identity vystavitele s hodnotou https://api.botframework.com.
  4. Token obsahuje deklaraci identity cílové skupiny s hodnotou rovnající se ID aplikace Microsoft robota.
  5. Token je v době platnosti. Standardní hodinová nerovnoměrná distribuce je 5 minut.
  6. Token má platný kryptografický podpis s klíčem uvedeným v dokumentu klíče OpenID načteným v kroku 3 pomocí podpisového algoritmu zadaného ve id_token_signing_alg_values_supported vlastnosti dokumentu metadat Open ID načteného v kroku 2.
  7. Token obsahuje deklaraci identity serviceUrl s hodnotou, která odpovídá serviceUrl vlastnosti v kořenovém adresáři objektu Aktivity příchozího požadavku.

Pokud se vyžaduje doporučení pro ID kanálu:

  • Měli byste vyžadovat, aby všechny Activity objekty odeslané robotovi s ID kanálu byly doprovázeny tokenem JWT, který je podepsaný doporučením pro daný kanál.
  • Pokud doporučení není k dispozici, robot by měl požadavek odmítnout vrácením stavového kódu HTTP 403 (Zakázáno).

Důležité

Všechny tyto požadavky jsou důležité, zejména požadavky 4 a 6. Při implementaci všech těchto požadavků na ověření zůstane robot otevřený útokům, což by mohlo způsobit, že robot dojde k divulování tokenu JWT.

Implementátoři by neměli vystavit způsob, jak zakázat ověřování tokenu JWT, který se odesílá do robota.

Připojení or robota: příklady komponent JWT

header:
{
  typ: "JWT",
  alg: "RS256",
  x5t: "<SIGNING KEY ID>",
  kid: "<SIGNING KEY ID>"
},
payload:
{
  aud: "<YOU MICROSOFT APP ID>",
  iss: "https://api.botframework.com",
  nbf: 1481049243,
  exp: 1481053143,
  ... other fields follow
}

Poznámka:

Skutečná pole se můžou v praxi lišit. Vytvořte a ověřte všechny tokeny JWT, jak je uvedeno výše.

Ověřování požadavků z bot Framework Emulatoru na robota

Bot Framework Emulator je desktopový nástroj, který můžete použít k otestování funkčnosti robota. I když bot Framework Emulator používá stejné technologie ověřování, jak je popsáno výše, nemůže zosobnit skutečnou službu Bot Připojení or. Místo toho používá ID aplikace Microsoft a heslo aplikace Microsoftu, které zadáte při připojení emulátoru k robotovi k vytvoření tokenů, které jsou identické s těmi, které robot vytvoří. Když emulátor odešle požadavek robotovi, určuje token JWT v Authorization hlavičce požadavku – v podstatě pomocí vlastních přihlašovacích údajů robota k ověření požadavku.

Pokud implementujete knihovnu ověřování a chcete přijímat požadavky z bot Framework Emulatoru, musíte přidat tuto další ověřovací cestu. Cesta je strukturálně podobná cestě Připojení oru –> cesta k ověření robota, ale místo dokumentu OpenID Připojení robota používá dokument OpenID msA.

Ověření volání z bot Framework Emulatoru:

  1. Váš robot získá token JWT z autorizační hlavičky v požadavcích odeslaných z bot Framework Emulatoru.
  2. Robot získá dokument metadat OpenID pro službu bot Připojení or.
  3. Robot získá seznam platných podpisových klíčů z dokumentu.
  4. Váš robot ověří pravost tokenu JWT.

Krok 2: Získání dokumentu metadat OPENID MSA

Dokument metadat OpenID určuje umístění druhého dokumentu, který obsahuje platné podpisové klíče. Pokud chcete získat dokument metadat MSA OpenID, vyžádejte tento požadavek přes HTTPS:

GET https://login.microsoftonline.com/botframework.com/v2.0/.well-known/openid-configuration

Následující příklad ukazuje dokument metadat OpenID vrácený v reakci na GET požadavek. Vlastnost jwks_uri určuje umístění dokumentu, který obsahuje platné podpisové klíče.

{
    "authorization_endpoint":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
    "token_endpoint":"https://login.microsoftonline.com/common/oauth2/v2.0/token",
    "token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt"],
    "jwks_uri":"https://login.microsoftonline.com/common/discovery/v2.0/keys",
    ...
}

Krok 3: Získání seznamu platných podpisových klíčů

Pokud chcete získat seznam platných podpisových klíčů, vyžádejte GET požadavek prostřednictvím protokolu HTTPS na adresu URL určenou jwks_uri vlastností v dokumentu metadat OpenID. Příklad:

GET https://login.microsoftonline.com/common/discovery/v2.0/keys
Host: login.microsoftonline.com

Text odpovědi určuje dokument ve formátu JWK.

Krok 4: Ověření tokenu JWT

Pokud chcete ověřit pravost tokenu odeslaného emulátorem, musíte token extrahovat z Authorization hlavičky požadavku, parsovat token, ověřit jeho obsah a ověřit jeho podpis.

Knihovny parsování JWT jsou k dispozici pro mnoho platforem a většina implementuje zabezpečené a spolehlivé analýzy tokenů JWT, i když je nutné tyto knihovny obvykle nakonfigurovat tak, aby určité vlastnosti tokenu (jeho vystavitel, cílová skupina atd.) obsahovaly správné hodnoty. Při analýze tokenu musíte nakonfigurovat knihovnu parsování nebo napsat vlastní ověření, abyste zajistili, že token splňuje tyto požadavky:

  1. Token byl odeslán v hlavičce HTTP Authorization se schématem Bearer.
  2. Token je platný JSON, který odpovídá standardu JWT.
  3. Token obsahuje deklaraci identity vystavitele s jednou ze zvýrazněných hodnot pro nevládní případy. Kontrola obou hodnot vystavitele zajistí, že kontrolujete hodnoty vystavitele v3.1 i v3.2.
  4. Token obsahuje deklaraci identity cílové skupiny s hodnotou rovnající se ID aplikace Microsoft robota.
  5. Emulátor v závislosti na verzi odešle ID aplikace prostřednictvím deklarace identity appid (verze 1) nebo deklarace identity autorizované strany (verze 2).
  6. Token je v době platnosti. Standardní hodinová nerovnoměrná distribuce je 5 minut.
  7. Token má platný kryptografický podpis s klíčem uvedeným v dokumentu klíče OpenID, který byl načten v kroku 3.

Poznámka:

Požadavek 5 je specifický pro cestu ověření emulátoru.

Pokud token nesplňuje všechny tyto požadavky, robot by měl požadavek ukončit vrácením stavového kódu HTTP 403 (Zakázáno).

Důležité

Všechny tyto požadavky jsou důležité, zejména požadavky 4 a 7. Při implementaci všech těchto požadavků na ověření zůstane robot otevřený útokům, což by mohlo způsobit, že robot dojde k divulování tokenu JWT.

Emulátor robota: ukázkové komponenty JWT

header:
{
  typ: "JWT",
  alg: "RS256",
  x5t: "<SIGNING KEY ID>",
  kid: "<SIGNING KEY ID>"
},
payload:
{
  aud: "<YOUR MICROSOFT APP ID>",
  iss: "https://sts.windows.net/d6d49420-f39b-4df7-a1dc-d59a935871db/",
  nbf: 1481049243,
  exp: 1481053143,
  ... other fields follow
}

Poznámka:

Skutečná pole se můžou v praxi lišit. Vytvořte a ověřte všechny tokeny JWT, jak je uvedeno výše.

Změny protokolu zabezpečení

Ověřování robotem pro Připojení or

Přihlašovací adresa URL OAuth

Verze protokolu Platná hodnota
v3.1 a v3.2 https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token

Rozsah OAuth

Verze protokolu Platná hodnota
v3.1 a v3.2 https://api.botframework.com/.default

ověřování robota Připojení orem

Dokument metadat OpenID

Verze protokolu Platná hodnota
v3.1 a v3.2 https://login.botframework.com/v1/.well-known/openidconfiguration

Vystavitel JWT

Verze protokolu Platná hodnota
v3.1 a v3.2 https://api.botframework.com

Ověřování emulátoru do robota

Přihlašovací adresa URL OAuth

Verze protokolu Platná hodnota
v3.1 a v3.2 https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token

Rozsah OAuth

Verze protokolu Platná hodnota
v3.1 a v3.2 ID aplikace Microsoftu pro vašeho robota + /.default

Cílová skupina JWT

Verze protokolu Platná hodnota
v3.1 a v3.2 ID aplikace Microsoft vašeho robota

Vystavitel JWT

Verze protokolu Platná hodnota
v3.1 1.0 https://sts.windows.net/d6d49420-f39b-4df7-a1dc-d59a935871db/
v3.1 2.0 https://login.microsoftonline.com/d6d49420-f39b-4df7-a1dc-d59a935871db/v2.0
v3.2 1.0 https://sts.windows.net/f8cdef31-a31e-4b4a-93e4-5f571e91255a/
v3.2 2.0 https://login.microsoftonline.com/f8cdef31-a31e-4b4a-93e4-5f571e91255a/v2.0

Viz také zvýrazněné hodnoty pro nevládní případy.

Dokument metadat OpenID

Verze protokolu Platná hodnota
v3.1 a v3.2 https://login.microsoftonline.com/botframework.com/v2.0/.well-known/openid-configuration

Další materiály