Autentisera JavaScript-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. Den här metoden förhindrar också att buggar inträffar när appen flyttas till produktion eftersom appen överprivilegierats 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. Den här metoden 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 JavaScript 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. Du kan skapa tjänstens huvudnamn med hjälp av antingen Azure Portal eller Azure CLI.
Logga in på Azure Portal och följ dessa steg.
2 – Skapa en Microsoft Entra-säkerhetsgrupp för lokal utveckling
Eftersom det vanligtvis finns flera utvecklare som arbetar med ett program rekommenderar vi att du skapar en Microsoft Entra-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 Microsoft Entra-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 Microsoft Entra-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 lokal utveckling
Objektet DefaultAzureCredential
söker efter informationen om tjänstens huvudnamn i en uppsättning miljövariabler vid körning. Eftersom de flesta utvecklare arbetar med flera program rekommenderar vi att du använder ett paket som dotenv för att komma åt miljön från en .env
fil som lagras i programmets katalog under utvecklingen. Detta omfattar de miljövariabler som används för att autentisera programmet till Azure så att de bara kan användas av det här programmet.
Filen .env
checkas aldrig in i källkontrollen eftersom den innehåller programhemlighetsnyckeln för Azure. Standardfilen .gitignore för JavaScript undantar .env
automatiskt filen från incheckningen.
Om du vill använda dotenv
paketet installerar du först paketet i ditt program.
npm install dotenv
Skapa sedan en .env
fil i programmets rotkatalog. Ange miljövariabelvärdena med värden som hämtats från appregistreringsprocessen enligt följande:
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.
AZURE_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444
AZURE_TENANT_ID=ffffaaaa-5555-bbbb-6666-cccc7777dddd
AZURE_CLIENT_SECRET=Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2
I startkoden för ditt program använder dotenv
du slutligen biblioteket för att läsa miljövariablerna från filen vid .env
start.
import 'dotenv/config'
5 – Implementera DefaultAzureCredential i ditt program
Om du vill autentisera DefaultAzureCredential
Azure SDK-klientobjekt till Azure bör ditt program använda klassen från @azure/identity
paketet. I det här scenariot DefaultAzureCredential
identifierar miljövariablerna AZURE_CLIENT_ID
, AZURE_TENANT_ID
och AZURE_CLIENT_SECRET
anges och läser dessa variabler för att hämta programtjänstens huvudnamnsinformation för att ansluta till Azure med.
Börja med att lägga till @azure/identitetspaketet i ditt program.
npm install @azure/identity
För alla JavaScript-kod som skapar ett Azure SDK-klientobjekt i din app vill du sedan:
DefaultAzureCredential
Importera klassen från modulen@azure/identity
.- Skapa ett
DefaultAzureCredential
objekt. - Skicka objektet
DefaultAzureCredential
till Azure SDK-klientobjektkonstruktorn.
Ett exempel på detta visas i följande kodsegment.
// Azure authentication dependency
import { DefaultAzureCredential } from '@azure/identity';
// Azure resource management dependency
import { SubscriptionClient } from "@azure/arm-subscriptions";
// Acquire credential
const tokenCredential = new DefaultAzureCredential();
async function listSubscriptions() {
try {
// use credential to authenticate with Azure SDKs
const client = new SubscriptionClient(tokenCredential);
// get details of each subscription
for await (const item of client.subscriptions.list()) {
const subscriptionDetails = await client.subscriptions.get(
item.subscriptionId
);
/*
Each item looks like:
{
id: '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e',
subscriptionId: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e',
displayName: 'YOUR-SUBSCRIPTION-NAME',
state: 'Enabled',
subscriptionPolicies: {
locationPlacementId: 'Internal_2014-09-01',
quotaId: 'Internal_2014-09-01',
spendingLimit: 'Off'
},
authorizationSource: 'RoleBased'
},
*/
console.log(subscriptionDetails);
}
} catch (err) {
console.error(JSON.stringify(err));
}
}
listSubscriptions()
.then(() => {
console.log("done");
})
.catch((ex) => {
console.log(ex);
});
DefaultAzureCredential
identifierar automatiskt den autentiseringsmekanism som konfigurerats för appen och hämtar nödvändiga token för att autentisera appen till Azure. Om ett program använder mer än en SDK-klient kan samma autentiseringsobjekt användas med varje SDK-klientobjekt.