Beim Entwickeln von Webdiensten müssen Sie möglicherweise Token über den OAuth 2.0-On-Behalf-Of-Fluss (OBO) abrufen. Der OBO-Fluss wird verwendet, wenn eine Anwendung einen Dienst oder eine Web-API aufruft, der bzw. die wiederum einen anderen Dienst oder eine andere Web-API aufrufen muss. Dabei werden die delegierte Benutzeridentität und die delegierten Berechtigungen durch die Anforderungskette weitergegeben. Wenn eine Anwendung Zugriffs- und Aktualisierungstoken unbegrenzt verwenden muss (in der Regel in Offlinezugriffsszenarios), ist wichtig, dass die Aktualisierungstoken sicher gespeichert werden.
Warnung
Stellen Sie sorgfältige Überlegungen hinsichtlich der Risiken und der Verantwortung in Bezug auf die Speicherung von Sicherheitstoken an, da diese Token böswilligen Akteuren Zugriff auf Ressourcen verschaffen können, die durch die Microsoft Entra ID-Instanz der Organisation geschützt werden. Eine Sicherheitsverletzung bei einer Anwendung, die Konten in einem beliebigen Organisationsverzeichnis (beliebiges Microsoft Entra-Verzeichnis – mehrinstanzenfähig) zum Ziel hat, kann besonders katastrophal sein.
Das Speichern von Zugriffstoken stellt ein höheres Sicherheitsrisiko dar, da Zugriffstoken dafür gedacht sind, auf Ressourcen zuzugreifen. Die empfohlene Vorgehensweise ist, Zugriffstoken nicht zu speichern, sondern bei Bedarf abzurufen. Speichern Sie nur die Aktualisierungstoken sicher, und seien Sie dabei so sorgfältig, als wären es Zugriffstoken.
Sofern erforderlich, können Sie Aktualisierungstoken widerrufen, wenn diese kompromittiert wurden.
Mögliche Anwendungsfälle
Diese Lösung verwendet Azure Key Vault, Azure Functions und Azure DevOps, um OBO-Aktualisierungstoken sicher zu aktualisieren und zu speichern.
Aufbau
Laden Sie eine Visio-Datei dieser Architektur herunter.
Datenfluss
- In Azure Key Vault sind geheime Verschlüsselungsschlüssel für alle Microsoft Entra ID-Mandanten gespeichert.
- Eine durch einen Timer ausgelöste Azure Functions-Funktion ruft den aktuellen geheimen Schlüssel aus Key Vault ab. Eine weitere Azure Functions-Funktion ruft das Aktualisierungstoken von der Microsoft Identity Platform ab und speichert es mit der aktuellen Version des geheimen Schlüssels.
- Der aktuelle verschlüsselte Schlüssel und die opaken Daten werden in einer Datenbank gespeichert.
- Eine Azure DevOps-Continuous-Delivery-Pipeline verwaltet und synchronisiert die Vorgänge für die Geheimnisrotation und die Tokenaktualisierung.
In Azure Pipelines können Sie einfach Ihre Schlüsselrotationsstrategie hinzufügen, wenn Sie bereits Pipelines für Infrastructure as Code (IaC) oder Continuous Integration und Continuous Delivery (CI/CD) verwenden. Sie müssen Azure Pipelines nicht verwenden, solange Sie die Pfade für das Festlegen und Abrufen von Geheimnissen beschränken.
Wenden Sie die folgende Richtlinie an, um ein Festlegen von Geheimnissen in Key Vault durch den Dienstprinzipal für Ihre Azure DevOps-Dienstverbindung zu erlauben. Ersetzen Sie die Variablen <Key Vault Name>
und <Service Connection Principal>
durch die richtigen Werte für Ihre Umgebung.
az keyvault set-policy --name $<Key Vault Name> --spn $<Service Connection Principal> --secret-permissions set
Wenn Sie Azure Pipelines zum Erstellen und Aktualisieren von Schlüsseln eingerichtet haben, können Sie die Pipeline so konfigurieren, dass sie regelmäßig ausgeführt wird. Die Pipeline aktualisiert das Key Vault-Geheimnis so, dass es mit der Schlüsselrotation synchronisiert wird, und speichert das verschlüsselte Token mit der neuen Version des Geheimnisses. Weitere Informationen finden Sie unter Konfigurieren von Zeitplänen für Pipelines.
Verwaltete Identität
Die bevorzugte Methode für den Zugriff eines Azure-Diensts wie Azure Functions auf Key Vault ist die Verwendung der verwalteten Identität des Diensts. Sie können den Zugriff über das Azure-Portal, die Azure CLI oder eine Azure Resource Manager-Vorlage (ARM) für IaC-Szenarios gewähren.
Azure-Portal
Fügen Sie im Azure-Portal eine Key Vault-Zugriffsrichtlinie hinzu, um die Objekt-ID der verwalteten Identität für Azure Functions für das Abrufen und Festlegen von Geheimnissen zuzulassen. Weitere Informationen finden Sie unter Hinzufügen einer systemseitig zugewiesenen Identität und Verwenden von Key Vault-Verweisen für App Service und Azure Functions.
Azure CLI
Sie können die Azure Key Vault-Richtlinie auch über die Azure CLI festlegen:
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
ARM-Vorlage
Die folgende Resource Manager-Vorlage gewährt Azure Functions Zugriff auf Azure Key Vault. Ersetzen Sie die Variable ***
jeweils durch den richtigen Wert für Ihre Umgebung.
{
"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"
]
}
}
]
}
}
Speicherung von Token
Sie können eine beliebige Datenbank verwenden, um die Token in verschlüsselter Form zu speichern. Das folgende Diagramm zeigt die Sequenz für die Speicherung von Aktualisierungstoken in einer Datenbank:
Die Sequenz verfügt über zwei Funktionen: userId()
und secretId()
. Sie können diese Funktionen als eine Kombination aus token.oid
, token.tid
und token.sub
definieren. Weitere Informationen finden Sie unter Verwenden des ID-Tokens.
Wenn der Kryptografieschlüssel als Geheimnis gespeichert wurde, können Sie die jeweils aktuelle Version des Schlüssels in Azure Key Vault abrufen.
Verwendung von Token
Die Verwendung des Schlüssels ist einfach. Die folgende Sequenz fragt den Schlüssel basierend auf der jeweils aktuellen Schlüsselversion ab.
Die Tokenaktualisierung ist orthogonal zur DoWork
-Funktion, sodass Azure Functions DoWork
und die Tokenaktualisierung mithilfe von Durable Functions asynchron ausführen kann. Weitere Informationen zu durch HTTP ausgelösten Funktionen mit Durable Functions finden Sie unter HTTP-Features.
Es wird nicht empfohlen, Azure Key Vault in der HTTP-Anforderungspipeline zu verwenden. Speichern Sie Antworten daher immer zwischen, wenn dies sinnvoll ist. Im angeführten Beispiel ist die Antwort von Key Vault auf den Aufruf von getSecret(secretId, secretVersion)
zwischenspeicherbar.
Schlüsselrotation und Tokenaktualisierung
Sie können den geheimen Schlüssel zu dem Zeitpunkt rotieren, zu dem Sie auch das Aktualisierungstoken aktualisieren, sodass das aktuelle Token mit der aktuellen Version des Verschlüsselungsgeheimnisses verschlüsselt wird. Bei diesem Prozess wird die in Azure Functions integrierte Unterstützung für Trigger mit Timer genutzt. Weitere Informationen finden Sie unter Trigger mit Timer für Azure Functions.
Das folgende Sequenzdiagramm veranschaulicht den Prozess der Synchronisierung der Tokenaktualisierung mit der Schlüsselrotation:
Benutzer- und Zugriffssteuerung
Die Microsoft Identity Platform bietet die Möglichkeit, Aktualisierungstoken bei Kompromittierung zu widerrufen. Weitere Informationen finden Sie unter Widerrufen von Token und Revoke-AzureADUserAllRefreshToken.
Hinweis
Azure AD- und MSOnline PowerShell-Module sind ab dem 30. März 2024 veraltet. Weitere Informationen finden Sie im Update zur Unterstützungseinstellung. Nach diesem Datum wird die Unterstützung für diese Module auf die Migrationsunterstützung für das Microsoft Graph PowerShell-SDK und Sicherheitskorrekturen beschränkt. Die veralteten Module funktionieren weiterhin bis zum 30. März 2025.
Es wird empfohlen, für die Interaktion mit Microsoft Entra ID (früher Azure AD) zu Microsoft Graph PowerShell zu migrieren. Informationen zu allgemeinen Migrationsfragen finden Sie in den häufig gestellten Fragen zur Migration. Hinweis: Bei der Version 1.0.x von MSOnline können nach dem 30. Juni 2024 Unterbrechungen auftreten.
Wenn Sie eine*n Benutzer*in aus Azure AD entfernen möchten, entfernen Sie einfach den Datensatz für diese*n. Wenn Sie den Zugriff auf Anwendungen auf Benutzerbasis entfernen möchten, entfernen Sie den refreshToken
-Teil der entsprechenden Benutzerdaten.
Zum Entfernen des Zugriffs für eine Gruppe von Benutzern (z. B. alle Benutzer in einem Zielmandanten) können Sie Azure Pipelines verwenden, um das Geheimnis der Gruppe basierend auf secretId()
zu löschen.
Beitragende
Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:
Hauptautor:
- Jason Mostella | Senior Software Engineer