Bezpečné obnovovací tokeny OAuth 2.0 On-Behalf-Of pro webové služby

Azure CLIs
Azure DevOps
Azure Functions
Azure Key Vault
Azure Pipelines

Při vývoji webových služeb možná budete muset získat tokeny pomocí toku OAuth 2.0 On-Behalf-Of (OBO). Tok OBO slouží k případu použití, kdy aplikace vyvolá službu nebo webové rozhraní API, které pak potřebuje volat jinou službu nebo webové rozhraní API. OBO rozšíří delegovanou identitu uživatele a oprávnění prostřednictvím řetězu požadavků. Když aplikace potřebuje trvale používat přístupové a obnovovací tokeny, obvykle ve scénářích offline přístupu, je důležité bezpečně ukládat obnovovací tokeny.

Upozorňující

Pečlivě zvažte riziko a zodpovědnost související s ukládáním všech tokenů zabezpečení, protože tyto tokeny můžou škodlivému objektu actor poskytnout přístup k prostředkům chráněným ID Microsoft Entra organizace. Porušení zabezpečení aplikace, která cílí na účty v libovolném organizačním adresáři (Jakýkoli adresář Microsoft Entra - Multitenant), může být obzvláště katastrofální.

Ukládání přístupových tokenů představuje větší riziko zabezpečení, protože přístupový token může přistupovat k prostředkům i sám o sobě. Doporučeným přístupem není ukládání přístupových tokenů, ale získání přístupových tokenů podle potřeby. Bezpečně ukládejte pouze obnovovací tokeny s tolika rigorií, jako kdyby se jednalo o přístupové tokeny.

V případě potřeby můžete odvolat obnovovací tokeny , pokud dojde k jejich ohrožení.

Potenciální případy použití

Toto řešení využívá Azure Key Vault, Azure Functions a Azure DevOps k bezpečné aktualizaci a ukládání obnovovacích tokenů OBO.

Architektura

Diagram znázorňující procesy aktualizace klíče a tokenu

Stáhněte si soubor aplikace Visio s touto architekturou.

Tok dat

Azure Pipelines je vhodným místem pro přidání strategie obměny klíčů, pokud už používáte Kanály pro infrastrukturu jako kód (IaC) nebo kontinuální integraci a doručování (CI/CD). Azure Pipelines nemusíte používat, pokud omezujete cesty pro nastavení a načítání tajných kódů.

Pomocí následujících zásad povolte instančnímu objektu pro připojení služby Azure DevOps nastavit tajné kódy ve službě Key Vault. <Key Vault Name> Nahraďte hodnoty a <Service Connection Principal> proměnné správnými hodnotami pro vaše prostředí.

az keyvault set-policy --name $<Key Vault Name> --spn $<Service Connection Principal> --secret-permissions set

Po nastavení služby Azure Pipelines pro vytváření a aktualizaci klíčů můžete naplánovat pravidelné spouštění kanálu. Kanál aktualizuje tajný klíč služby Key Vault, aby se synchronizoval s obměnou klíčem, a uloží šifrovaný token s novou verzí tajného kódu. Další informace najdete v tématu Konfigurace plánů pro kanály.

Spravovaná identita

Upřednostňovaným způsobem přístupu ke službě Azure, jako je Azure Functions, je použití spravované identity služby. Přístup můžete udělit prostřednictvím webu Azure Portal, Azure CLI nebo šablony Azure Resource Manageru (ARM) pro scénáře IaC.

portál Azure

Na webu Azure Portal přidejte zásadu přístupu ke službě Key Vault, která umožní id objektu spravované identity služby Azure Functions získat a nastavit tajné kódy. Další informace najdete v tématu Přidání identity přiřazené systémem a použití odkazů služby Key Vault pro App Service a Azure Functions.

Snímek obrazovky znázorňující povolení spravované identity na webu Azure Portal

Azure CLI

Zásady služby Azure Key Vault můžete také nastavit pomocí Azure CLI:

az keyvault set-policy --name $<Key Vault Name> --spn $<Service Connection Principal> --secret-permissions set
az keyvault set-policy --name $<Key Vault Name> --spn $<Managed Identity Principal> --secret-permissions get

Šablona ARM

Následující šablona ARM poskytuje službě Azure Functions přístup ke službě Azure Key Vault. *** Nahraďte proměnné správnými hodnotami pro vaše prostředí.

{
  "type": "Microsoft.KeyVault/vaults",
  "apiVersion": "2019-09-01",
  "name": "***",
  "location": "***",
  "properties": {
    "sku": {
      "family": "A",
      "name": "standard"
    },
    "tenantId": "***",
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForTemplateDeployment": false,
    "enabledForDiskEncryption": false,
    "accessPolicies": [
      {
        "tenantId": "***",
        "objectId": "<Managed Identity Principal>",
        "permissions": {
          "secrets": [
            "get"
          ]
        }
      },
      {
        "tenantId": "***",
        "objectId": "<Service Connection Principal>",
        "permissions": {
          "secrets": [
            "set"
          ]
        }
      }
    ]
  }
}

Úložiště tokenů

K uložení tokenů v šifrované podobě můžete použít libovolnou databázi. Následující diagram znázorňuje posloupnost pro ukládání obnovovacích tokenů v databázi:

Diagram znázorňující posloupnost přidání tokenu

Sekvence má dvě funkce userId() a secretId(). Tyto funkce můžete definovat jako určitou kombinaci , token.oidtoken.tida token.sub. Další informace naleznete v tématu Použití id_token.

Pomocí kryptografického klíče uloženého jako tajný klíč můžete vyhledat nejnovější verzi klíče ve službě Azure Key Vault.

Využití tokenů

Použití klíče je jednoduché. Následující posloupnost dotazuje klíč na základě nejnovější verze klíče.

Diagram znázorňující posloupnost využití uloženého tokenu

Aktualizace tokenu je pro funkci orthogonální DoWork , takže Azure Functions může provádět DoWork a obnovování tokenů asynchronně pomocí Durable Functions. Další informace o funkcích aktivovaných protokolem HTTP s Durable Functions naleznete v tématu Funkce HTTP.

Nedoporučujeme používat Azure Key Vault v kanálu požadavku HTTP, takže odpovědi na mezipaměť vždy, když jsou rozumné. V příkladu je odpověď služby Key Vault na getSecret(secretId, secretVersion) volání uložená v mezipaměti.

Obměně klíčů a aktualizace tokenů

Tajný klíč můžete obměňovat současně s aktualizací obnovovacího tokenu, takže nejnovější token se zašifruje pomocí nejnovější verze tajného klíče šifrování. Tento proces používá integrovanou podporu azure Functions pro triggery časovače. Další informace najdete v tématu Trigger časovače pro Azure Functions.

Následující sekvenční diagram znázorňuje proces synchronizace aktualizace tokenu s obměnou klíčem:

Diagram znázorňující posloupnost synchronizace aktualizace tokenu s obměnou klíčem

Řízení přístupu a uživatelů

Platforma Microsoft Identity Platform nabízí možnost odvolat obnovovací tokeny v případě ohrožení zabezpečení. Viz Odvolání tokenu a Revoke-AzureADUserAllRefreshToken.

Poznámka:

Moduly Azure AD a MSOnline PowerShell jsou od 30. března 2024 zastaralé. Další informace najdete v aktualizaci vyřazení. Po tomto datu je podpora těchto modulů omezená na pomoc s migrací na sadu Microsoft Graph PowerShell SDK a opravy zabezpečení. Zastaralé moduly budou dál fungovat až do 30. března 2025.

Doporučujeme migrovat na Microsoft Graph PowerShell , abyste mohli pracovat s Microsoft Entra ID (dříve Azure AD). Běžné dotazy k migraci najdete v nejčastějších dotazech k migraci. Poznámka: Verze 1.0.x msOnline mohou dojít k přerušení po 30. červnu 2024.

Pokud chcete odebrat uživatele z ID Microsoft Entra, stačí odebrat záznam uživatele. Pokud chcete odebrat přístup k aplikaci pro jednotlivé uživatele, odeberte refreshToken část uživatelských dat.

Pokud chcete odebrat přístup pro skupinu uživatelů, jako jsou všichni uživatelé v cílovém tenantovi, můžete pomocí Služby Azure Pipelines odstranit tajný kód skupiny na secretId()základě .

Přispěvatelé

Tento článek spravuje Microsoft. Původně byla napsána následujícími přispěvateli.

Hlavní autor:

Další kroky