Autentisera NET-appar till Azure-tjänster under lokal utveckling med hjälp av tjänstens huvudnamn
När du skapar molnprogram måste utvecklare felsöka och testa program på sin lokala arbetsstation. När ett program körs på en utvecklares arbetsstation under den lokala utvecklingen måste det fortfarande autentiseras mot alla Azure-tjänster som används av appen. Den här artikeln beskriver hur du konfigurerar dedikerade programtjänstobjekt som ska användas under lokal utveckling.
Med dedikerade huvudnamn för programtjänsten för lokal utveckling kan du följa principen om lägsta behörighet under apputveckling. Eftersom behörigheter är begränsade till exakt vad som behövs för appen under utvecklingen förhindras appkod från att oavsiktligt komma åt en Azure-resurs som är avsedd att användas av en annan app. Detta förhindrar också att buggar inträffar när appen flyttas till produktion eftersom appen överprivilegierades i utvecklingsmiljön.
Ett huvudnamn för programtjänsten konfigureras för appen när appen är registrerad i Azure. När du registrerar appar för lokal utveckling rekommenderar vi att du:
- Skapa separata appregistreringar för varje utvecklare som arbetar med appen. Detta skapar separata huvudnamn för programtjänsten som varje utvecklare kan använda under lokal utveckling och undviker behovet av att utvecklare delar autentiseringsuppgifter för ett enda huvudnamn för programtjänsten.
- Skapa separata appregistreringar per app. Detta omfattar endast appens behörigheter till det som behövs av appen.
Under lokal utveckling anges miljövariabler med programtjänstens huvudnamns identitet. Azure SDK för NET läser dessa miljövariabler och använder den här informationen för att autentisera appen till de Azure-resurser den behöver.
1 – Registrera programmet i Azure
Huvudobjekt för programtjänsten skapas med en appregistrering i Azure. Detta kan göras med antingen Azure-portalen eller Azure CLI.
Logga in på Azure-portalen och följ dessa steg.
2 – Skapa en Azure AD-säkerhetsgrupp för lokal utveckling
Eftersom det vanligtvis finns flera utvecklare som arbetar med ett program rekommenderar vi att du skapar en Azure AD-grupp för att kapsla in de roller (behörigheter) som appen behöver i lokal utveckling i stället för att tilldela rollerna till enskilda objekt för tjänstens huvudnamn. Detta ger följande fördelar.
- Varje utvecklare är säker på att ha samma roller tilldelade eftersom roller tilldelas på gruppnivå.
- Om en ny roll behövs för appen behöver den bara läggas till i Azure AD-gruppen för appen.
- Om en ny utvecklare ansluter till teamet skapas ett nytt huvudnamn för programtjänsten för utvecklaren och läggs till i gruppen, vilket säkerställer att utvecklaren har rätt behörighet att arbeta med appen.
3 – Tilldela roller till programmet
Därefter måste du bestämma vilka roller (behörigheter) din app behöver på vilka resurser och tilldela dessa roller till din app. I det här exemplet tilldelas rollerna till den Azure Active Directory-grupp som skapades i steg 2. Roller kan tilldelas en roll i ett resurs-, resursgrupps- eller prenumerationsomfång. Det här exemplet visar hur du tilldelar roller i resursgruppens omfång eftersom de flesta program grupperar alla sina Azure-resurser i en enda resursgrupp.
4 – Ange miljövariabler för program
Objektet DefaultAzureCredential
söker efter informationen om tjänstens huvudnamn i en uppsättning miljövariabler vid körning. Det finns flera sätt att konfigurera miljövariabler när du arbetar med .NET beroende på verktyg och miljö.
Oavsett vilken metod du väljer måste du konfigurera följande miljövariabler när du arbetar med tjänstens huvudnamn.
AZURE_CLIENT_ID
→ App-ID-värdet.AZURE_TENANT_ID
→ Klientorganisations-ID-värdet.AZURE_CLIENT_SECRET
→ Lösenordet/autentiseringsuppgifterna som genereras för appen.
När du arbetar lokalt med Visual Studio kan miljövariabler anges i launchsettings.json
filen i Properties
mappen för projektet. När appen startas hämtas dessa värden automatiskt. Tänk på att dessa konfigurationer inte överförs med ditt program när det distribueras, så du måste fortfarande konfigurera miljövariabler i målvärdmiljön.
"profiles": {
"SampleProject": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7177;http://localhost:5177",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
"AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
"AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
"AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
"AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
}
}
}
5 – Implementera DefaultAzureCredential i ditt program
DefaultAzureCredential
stöder flera autentiseringsmetoder och avgör vilken autentiseringsmetod som används vid körning. På så sätt kan din app använda olika autentiseringsmetoder i olika miljöer utan att implementera miljöspecifik kod.
Ordningen och platserna där DefaultAzureCredential
du söker efter autentiseringsuppgifter finns i StandardAzureCredential.
Om du vill implementera DefaultAzureCredential
lägger du först till Azure.Identity
och eventuellt paketen i Microsoft.Extensions.Azure
ditt program. Du kan göra detta med antingen kommandoraden eller NuGet Package Manager.
Öppna valfri terminalmiljö i programprojektkatalogen och ange kommandot nedan.
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Azure-tjänster används vanligtvis med motsvarande klientklasser från SDK:et. Dessa klasser och dina egna anpassade tjänster bör registreras i Program.cs
filen så att de kan nås via beroendeinmatning i hela appen. Program.cs
I följer du stegen nedan för att konfigurera tjänsten och DefaultAzureCredential
.
Azure.Identity
Inkludera namnrymderna ochMicrosoft.Extensions.Azure
med en using-instruktion.- Registrera Azure-tjänsten med relevanta hjälpmetoder.
- Skicka en instans av
DefaultAzureCredential
objektet tillUseCredential
-metoden.
Ett exempel på detta visas i följande kodsegment.
using Microsoft.Extensions.Azure;
using Azure.Identity;
// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
x.UseCredential(new DefaultAzureCredential());
});
Du kan också använda DefaultAzureCredential
dina tjänster mer direkt utan hjälp av ytterligare Azure-registreringsmetoder, enligt nedan.
using Azure.Identity;
// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
När koden ovan körs på din lokala arbetsstation under den lokala utvecklingen kommer den att titta i miljövariablerna efter ett huvudnamn för programtjänsten eller i Visual Studio, VS Code, Azure CLI eller Azure PowerShell för en uppsättning autentiseringsuppgifter för utvecklare, som kan användas för att autentisera appen till Azure-resurser under lokal utveckling.
När den här koden distribueras till Azure kan den även autentisera din app till andra Azure-resurser. DefaultAzureCredential
kan hämta miljöinställningar och hanterade identitetskonfigurationer för att autentisera till andra tjänster automatiskt.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för