Autoryzowanie żądań do zasobów usługi Azure SignalR Service za pomocą tożsamości zarządzanych firmy Microsoft Entra
Usługa Azure SignalR Service obsługuje identyfikator Entra firmy Microsoft do autoryzowania żądań z tożsamości zarządzanych przez firmę Microsoft Entra.
W tym artykule pokazano, jak skonfigurować zasób i kod usługi Azure SignalR Service w celu autoryzowania żądań do zasobu z tożsamości zarządzanej.
Konfigurowanie tożsamości zarządzanych
Pierwszym krokiem jest skonfigurowanie tożsamości zarządzanych.
W tym przykładzie pokazano, jak skonfigurować tożsamość zarządzaną przypisaną przez system w usłudze App Service przy użyciu witryny Azure Portal:
Uzyskaj dostęp do ustawień aplikacji w witrynie Azure Portal w grupie Ustawienia w okienku nawigacji po lewej stronie.
Wybierz Tożsamość.
Na karcie Przypisane przez system przełącz pozycję Stan na Włączone. Kliknij przycisk Zapisz.
Aby dowiedzieć się więcej na temat konfigurowania tożsamości zarządzanych na inne sposoby aplikacja systemu Azure Service i Azure Functions, zobacz How to use managed identities for App Service and Azure Functions (Jak używać tożsamości zarządzanych dla usług App Service i Azure Functions).
Aby dowiedzieć się więcej na temat konfigurowania tożsamości zarządzanych na maszynie wirtualnej platformy Azure, zobacz Konfigurowanie tożsamości zarządzanych na maszynach wirtualnych platformy Azure
Dodawanie przypisań ról w witrynie Azure Portal
W poniższych krokach opisano sposób przypisywania roli serwera aplikacji Usługi SignalR do tożsamości przypisanej przez system za pośrednictwem zasobu usługi Azure SignalR Service. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.
Uwaga
Rolę można przypisać do dowolnego zakresu, w tym grupy zarządzania, subskrypcji, grupy zasobów lub pojedynczego zasobu. Aby dowiedzieć się więcej na temat zakresu, zobacz Omówienie zakresu kontroli dostępu opartej na rolach platformy Azure.
W witrynie Azure Portal przejdź do zasobu usługi Azure SignalR Service.
Wybierz pozycję Kontrola dostępu (IAM).
Wybierz pozycję Dodaj>Dodaj przypisanie roli.
Na karcie Rola wybierz pozycję SignalR App Server.
Na karcie Członkowie wybierz pozycję Tożsamość zarządzana, a następnie wybierz pozycję Wybierz członków.
Wybierz subskrypcję platformy Azure.
Wybierz pozycję Tożsamość zarządzana przypisana przez system, wyszukaj maszynę wirtualną, do której chcesz przypisać rolę, a następnie wybierz ją.
Na karcie Przeglądanie i przypisywanie wybierz pozycję Przejrzyj i przypisz, aby przypisać rolę.
Ważne
Propagowanie przypisań ról platformy Azure może potrwać do 30 minut.
Aby dowiedzieć się więcej na temat przypisywania ról platformy Azure i zarządzania nimi, zobacz następujące artykuły:
- Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal
- Przypisywanie ról platformy Azure przy użyciu interfejs API Rest
- Przypisywanie ról platformy Azure przy użyciu Azure PowerShell
- Przypisywanie ról platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure
- Przypisywanie ról platformy Azure przy użyciu szablonów usługi Azure Resource Manager
Konfigurowanie aplikacji
Serwer aplikacji
Używanie tożsamości przypisanej przez system
Zestaw SDK usługi Azure SignalR obsługuje parametry połączenia oparte na tożsamościach. Jeśli konfiguracja jest ustawiona w zmiennych środowiskowych serwera aplikacji, nie musisz ponownie wdrażać serwera aplikacji, ale po prostu zmiana konfiguracji w celu migracji z klucza dostępu do tożsamości usługi zarządzanej. Na przykład zaktualizuj zmienną środowiskową Azure__SignalR__ConnectionString
serwera aplikacji na Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0;
. Lub ustaw w kodzie DI.
services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0;");
Poza tym możesz użyć opcji DefaultAzureCredential lub ManagedIdentityCredential , aby skonfigurować punkty końcowe usługi Azure SignalR Service. Najlepszym rozwiązaniem jest bezpośrednie użycie ManagedIdentityCredential
.
Zwróć uwagę, że tożsamość zarządzana przypisana przez system jest używana domyślnie, ale upewnij się, że nie skonfigurowano żadnych zmiennych środowiskowych zachowanych przez element EnvironmentCredential , jeśli używasz polecenia DefaultAzureCredential
. W przeciwnym razie usługa Azure SignalR Service wraca do użycia EnvironmentCredential
w celu wykonania żądania, co zwykle powoduje Unauthorized
odpowiedź.
Ważne
Usuń Azure__SignalR__ConnectionString
, jeśli w ten sposób wystąpiły zmienne środowiskowe. Azure__SignalR__ConnectionString
zostanie użyty do utworzenia domyślnego ServiceEndpoint
z priorytetem i może uruchomić serwer aplikacji nieoczekiwanie używać klucza dostępu.
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
};
});
Używanie tożsamości przypisanej przez użytkownika
Podaj ClientId
podczas tworzenia ManagedIdentityCredential
obiektu.
Ważne
Użyj identyfikatora klienta, a nie identyfikatora obiektu (podmiotu zabezpieczeń), nawet jeśli są one identyfikatorami GUID.
Użyj parametry połączenia opartej na tożsamościach.
services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;ClientId=<your-user-identity-client-id>;Version=1.0;");
Lub skompiluj za pomocą polecenia ServiceEndpoint
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)),
};
});
Powiązania usługi Azure SignalR Service w usłudze Azure Functions
Powiązania usługi Azure SignalR Service w usłudze Azure Functions używają ustawień aplikacji w portalu lub local.settings.json lokalnie w celu skonfigurowania tożsamości zarządzanej w celu uzyskania dostępu do zasobów usługi Azure SignalR Service.
Do skonfigurowania tożsamości może być potrzebna grupa par klucz/wartość. Klucze wszystkich par klucz/wartość muszą rozpoczynać się od prefiksu nazwy połączenia (domyślnie ) AzureSignalRConnectionString
i separatora. Separator to podkreślenie (__
) w portalu i dwukropek (:
) lokalnie. Prefiks można dostosować przy użyciu właściwości ConnectionStringSetting
binding .
Używanie tożsamości przypisanej przez system
Jeśli skonfigurujesz tylko identyfikator URI usługi, użyjesz DefaultAzureCredential
klasy . Ta klasa jest przydatna, gdy chcesz współużytkować tę samą konfigurację w środowiskach deweloperskich platformy Azure i lokalnych. Aby dowiedzieć się, jak to działa, zobacz DefaultAzureCredential.
W witrynie Azure Portal użyj poniższego przykładu, aby skonfigurować DefaultAzureCredential
usługę . Jeśli nie skonfigurujesz żadnej z tych zmiennych środowiskowych, tożsamość przypisana przez system zostanie użyta do uwierzytelniania.
<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
Oto przykład DefaultAzureCredential
konfiguracji w pliku local.settings.json . W zakresie lokalnym nie ma tożsamości zarządzanej. Uwierzytelnianie za pomocą programu Visual Studio, interfejsu wiersza polecenia platformy Azure i kont programu Azure PowerShell jest podejmowane w określonej kolejności.
{
"Values": {
"<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net"
}
}
Jeśli chcesz niezależnie używać tożsamości przypisanej przez system i bez wpływu innych zmiennych środowiskowych, ustaw credential
klucz z prefiksem nazwy połączenia na managedidentity
wartość . Oto przykład ustawień aplikacji:
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
Używanie tożsamości przypisanej przez użytkownika
Jeśli chcesz użyć tożsamości przypisanej przez użytkownika, musisz przypisać clientId
oprócz serviceUri
kluczy i credential
z prefiksem nazwy połączenia. Oto przykład ustawień aplikacji:
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>
Następne kroki
Zobacz następujące powiązane artykuły: