Autoriser les demandes adressées aux ressources Azure SignalR Service avec des identités managées Microsoft Entra
Azure SignalR Service prend en charge Microsoft Entra ID pour autoriser les demandes provenant d’identités managées Microsoft Entra.
Cet article explique comment configurer votre ressource Azure SignalR Service et votre code pour autoriser les demandes adressées à la ressource à partir d’une identité managée.
Configurer des identités managées
La première étape consiste à configurer des identités managées.
Cet exemple montre comment configurer une identité managée affectée par le système sur une instance d’App Service à l’aide du Portail Azure :
Accédez aux paramètres de votre application dans le pPortail Azure sous le groupe Paramètres dans le volet de navigation gauche.
Sélectionnez Identité.
Dans l’onglet Attribuée par le système, définissez État sur Activé. Cliquez sur Enregistrer.
Pour en savoir plus sur les autres façons de configurer des identités managées pour Azure App Service et Azure Functions, consultez Comment utiliser des identités managées pour App Service et Azure Functions.
Pour en savoir plus sur la configuration des identités managées sur une machine virtuelle Azure, consultez Configurer des identités managées sur des machines virtuelles Azure.
Ajouter des attributions de rôles sur le Portail Azure
Les étapes suivantes décrivent comment attribuer un rôle SignalR App Server à une identité affectée par le système sur une ressource Azure SignalR Service. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.
Remarque
Un rôle peut être attribué à n’importe quelle étendue, notamment un groupe d’administration, un abonnement, un groupe de ressources ou une seule ressource. Pour en savoir plus sur l’étendue, consultez Comprendre l’étendue d’Azure RBAC.
Dans le portail Azure, accédez à votre ressource Azure SignalR Service.
Sélectionnez Contrôle d’accès (IAM) .
Sélectionnez Ajouter>Ajouter une attribution de rôle.
Sous l’onglet Rôle, sélectionnez SignalR App Server.
Sous l’onglet Membres, sélectionnez Identité managée, puis choisissez Sélectionner des membres.
Sélectionnez votre abonnement Azure.
Sélectionnez Identité managée affectée par le système, recherchez une machine virtuelle à laquelle vous souhaitez attribuer le rôle, puis sélectionnez-la.
Dans l’onglet Passer en revue + affecter, sélectionnez Passer en revue + affecter pour affecter le rôle.
Important
Les attributions de rôles Azure peuvent prendre jusqu’à 30 minutes pour se propager.
Pour en savoir plus sur l’attribution et la gestion des rôles Azure, consultez les articles suivants :
- Attribuer des rôles Azure à l’aide du portail Azure
- Attribuer des rôles Azure à l’aide de l’API REST
- Attribuer des rôles Azure à l’aide d’Azure PowerShell
- Attribuer des rôles Azure à l’aide d’Azure CLI
- Attribuer des rôles Azure avec des modèles Azure Resource Manager
Configurer votre application
App Server
Utiliser une identité affectée par le système
Le SDK Azure SignalR prend en charge la chaîne de connexion basée sur l’identité. Si la configuration est définie dans les variables d’environnement du serveur d’applications, vous n’avez pas besoin de redéployer le serveur d’applications, mais simplement de modifier la configuration pour migrer de la clé d’accès vers MSI. Par exemple, mettez à jour la variable d’environnement Azure__SignalR__ConnectionString
de votre serveur d’applications sur Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0;
. Vous pouvez également la définir dans le code DI.
services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0;");
En outre, vous pouvez utiliser DefaultAzureCredential ou ManagedIdentityCredential pour configurer vos points de terminaison Azure SignalR Service. La meilleure pratique consiste à utiliser ManagedIdentityCredential
directement.
Notez que l’identité managée affectée par le système est utilisée par défaut, mais assurez-vous de ne pas configurer de variables d’environnement qu’EnvironmentCredential a conservées si vous utilisez DefaultAzureCredential
. Sinon, Azure SignalR Service revient à utiliser EnvironmentCredential
pour effectuer la demande, ce qui entraîne généralement une réponse Unauthorized
.
Important
Supprimez Azure__SignalR__ConnectionString
de cette manière, s’il se trouvait dans une variable d’environnement. Azure__SignalR__ConnectionString
sera utilisé pour générer le ServiceEndpoint
par défaut avec la première priorité et peut conduire votre serveur d’applications à utiliser la clé d’accès de manière inattendue.
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
};
});
Utiliser une identité affectée par l’utilisateur
Fournissez ClientId
pendant la création de l’objet ManagedIdentityCredential
.
Important
Utilisez l’ID client, et non l’ID objet (principal), même s’ils sont tous les deux des GUID.
Utilisez la chaîne de connexion basée sur l’identité.
services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;ClientId=<your-user-identity-client-id>;Version=1.0;");
Vous pouvez également générer ServiceEndpoint
avec ManagedIdentityCredential
.
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
var clientId = "<your-user-identity-client-id>";
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
};
});
Liaisons Azure SignalR Service dans Azure Functions
Les liaisons Azure SignalR Service dans Azure Functions utilisent des paramètres d’application dans le portail ou local.settings.json localement pour configurer une identité managée pour accéder à vos ressources Azure SignalR Service.
Vous pouvez avoir besoin d’un groupe de paires clé/valeur pour configurer une identité. Les clés de toutes les paires clé/valeur doivent commencer par un préfixe de nom de connexion (dont la valeur par défaut est AzureSignalRConnectionString
) et un séparateur. Le séparateur est un trait de soulignement (__
) dans le portail et un signe deux-points (:
) localement. Vous pouvez personnaliser le préfixe à l’aide de la propriété de liaison ConnectionStringSetting
.
Utiliser une identité affectée par le système
Si vous configurez uniquement l’URI de service, vous utilisez la classe DefaultAzureCredential
. Cette classe est utile lorsque vous souhaitez partager la même configuration dans les environnements de développement Azure et local. Pour en savoir plus son fonctionnement, consultez DefaultAzureCredential.
Sur le Portail Azure, utilisez l’exemple suivant pour configurer DefaultAzureCredential
. Si vous ne configurez aucune de ces variables d’environnement, l’identité affectée par le système est utilisée pour l’authentification.
<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
Voici un exemple de configuration de DefaultAzureCredential
dans le fichier local.settings.json. Dans l’étendue locale, il n’existe aucune identité managée. L’authentification via les comptes Visual Studio, Azure CLI et Azure PowerShell est tentée dans l’ordre.
{
"Values": {
"<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net"
}
}
Si vous souhaitez utiliser une identité affectée par le système indépendamment et sans l’influence d’autres variables d’environnement, vous devez définir la clé credential
avec le préfixe de nom de connexion sur managedidentity
. Voici un exemple pour les paramètres d’application :
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
Utiliser une identité affectée par l’utilisateur
Si vous souhaitez utiliser une identité affectée par l’utilisateur, vous devez attribuer clientId
en plus des clés serviceUri
et credential
avec le préfixe de nom de connexion. Voici un exemple pour les paramètres d’application :
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>
Étapes suivantes
Consultez les articles associés suivants :