Autentisering med Azure SDK för Go (äldre)

Viktigt!

Den här artikeln gäller för den äldre versionen av Azure SDK för Go. För att autentisera till de senaste modulerna använder du Azure Identity-paketet.

Med Azure SDK för Go får du flera olika sätt att autentisera med Azure. De här typerna av autentisering kan anropas genom olika autentiseringsmetoder. I den här artikeln beskrivs tillgängliga typer, metoder och hur du väljer vad som är bäst för ditt program.

Tillgängliga autentiseringstyper och metoder

Azure SDK för Go erbjuder flera olika typer av autentisering som använder olika uppsättningar autentiseringsuppgifter. Var och en av de här autentiseringstyperna är tillgängliga via olika autentiseringsmetoder. Det är så SDK tar de här autentiseringsuppgifterna som indata. I följande tabell beskrivs de tillgängliga typerna av autentisering och situationer där de rekommenderas att användas av ditt program.

Authentication type Rekommenderas när...
Certifikatbaserad autentisering Du har ett X509-certifikat som har konfigurerats för en Microsoft Entra-användare eller tjänstens huvudnamn. Mer information finns i Kom igång med certifikatbaserad autentisering i Microsoft Entra-ID.
Klientautentiseringsuppgifter Du har ett konfigurerat huvudnamn för tjänsten som har konfigurerats för det här programmet eller en klass av program som det tillhör. Läs Skapa ett huvudnamn för tjänsten med Azure CLI för att lära dig mer.
Hanterade identiteter för Azure-resurser Programmet körs på en Azure-resurs som har konfigurerats med en hanterad identitet. Mer information finns i Hanterade identiteter för Azure-resurser.
Enhetstoken Programmet är avsett att endast användas interaktivt. Användare kan ha multifaktorautentisering aktiverat. Användare har åtkomst till en webbläsare för att logga in. Mer information finns i Använda autentisering med enhetstoken.
Användarnamn/lösenord Du har ett interaktivt program som inte kan använda någon annan autentiseringsmetod. Dina användare har inte multifaktorautentisering aktiverat för sin Microsoft Entra-inloggning.

Huvudpunkter

  • Om du använder en annan autentiseringstyp än klientautentiseringsuppgifter måste programmet registreras i Microsoft Entra-ID. Mer information finns i Integrera program med Microsoft Entra-ID.
  • Om du inte har särskilda krav bör du undvika autentisering med användarnamn/lösenord. I situationer där användarbaserad inloggning är lämplig kan enhetstokenautentisering vanligtvis användas i stället.

De här typerna av autentisering är tillgängliga via olika metoder.

Alla autentiseringsfunktioner och typer är tillgängliga i github.com/Azure/go-autorest/autorest/azure/auth-paketet.

Kommentar

Om du inte har särskilda krav bör du undvika klientbaserad autentisering. Den här metoden för autentisering uppmanar användarna att använda dåliga metoder. I synnerhet gör klientbaserad autentisering det lockande att hårdkoda autentiseringsuppgifter. Att skriva anpassad kod för autentisering kan också sluta fungera efter att kommande SDK-versioner har släppts om de ändrar kraven för autentisering.

Använda miljö för autentisering

Om du kör programmet i en kontrollerad miljö är miljöbaserad autentisering det naturliga valet. Med den här autentiseringsmetoden kan du konfigurera gränssnittsmiljön innan du kör programmet. Vid körning läser Go-SDK dessa miljövariabler för att autentisera med Azure.

Miljöbaserad autentisering har stöd för alla autentiseringstyper utom enhetstoken, utvärderas i följande ordning:

  • Klientautentiseringsuppgifter
  • Certifikatbaserad autentisering
  • Användarnamn/lösenord
  • Hanterade identiteter för Azure-resurser

Om en autentiseringstyp har odefinierade värden eller nekas försöker SDK automatiskt nästa autentiseringstyp. SDK returnerar ett fel när det inte finns fler typer.

I följande tabell beskrivs miljövariabler som måste anges för varje autentiseringstyp som stöds av miljöbaserad autentisering.

Authentication type Miljövariabel beskrivning
Klientautentiseringsuppgifter AZURE_TENANT_ID ID för Active Directory-klientorganisationen som tjänstens huvudnamn tillhör.
AZURE_CLIENT_ID Namn eller ID för tjänstens huvudnamn.
AZURE_CLIENT_SECRET Hemligheten som är associerad med tjänstens huvudnamn.
Certifikat AZURE_TENANT_ID ID för Active Directory-klientorganisationen som certifikatet är registrerat i.
AZURE_CLIENT_ID Programmets klient-ID som är associerat med certifikatet.
AZURE_CERTIFICATE_PATH Sökvägen till klientcertifikatfilen.
AZURE_CERTIFICATE_PASSWORD Lösenordet för klientcertifikatet.
Användarnamn/lösenord AZURE_TENANT_ID ID för Active Directory-klientorganisationen som användaren tillhör.
AZURE_CLIENT_ID Programmets klients-ID.
AZURE_USERNAME Användarnamnet som används för att logga in.
AZURE_PASSWORD Lösenordet som används för att logga in.
Hanterade identiteter Autentiseringsuppgifter behövs inte för autentisering av hanterad identitet. Programmet måste köras på en Azure-resurs som har konfigurerats för att använda hanterade identiteter. Information finns i Hanterade identiteter för Azure-resurser.

Om du behöver ansluta till ett moln eller en hanteringsslutpunkt annat än det offentliga Azure-moln som är standard kan du ange följande miljövariabler. De vanligaste orsakerna är att du använder Azure Stack, ett moln i en annan geografisk region eller den klassiska distributionsmodellen.

Miljövariabel beskrivning
AZURE_ENVIRONMENT Namnet på molnmiljön som användaren ska ansluta till.
AZURE_AD_RESOURCE Resurs-ID för Active Directory som ska användas vid anslutning, som en URI till hanteringsslutpunkten.

När du använder miljöbaserad autentisering anropar du funktionen NewAuthorizerFromEnvironment för att hämta ditt authorizer-objekt. Det här objektet konfigureras i egenskapen Authorizer för klienter för att ge dem åtkomst till Azure.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Autentisering på Azure Stack

Om du vill autentisera på Azure Stack måste du ange följande variabler:

Miljövariabel beskrivning
AZURE_AD_ENDPOINT Azure Active Directory-slutpunkten.
AZURE_AD_RESOURCE Resurs-ID:t för Azure Active Directory.

Dessa variabler kan hämtas från Azure Stack-metadatainformationen. Om du vill hämta metadata öppnar du en webbläsare i Azure Stack-miljön och använder URL:en: (ResourceManagerURL)/metadata/endpoints?api-version=1.0

ResourceManagerURL varierar beroende på regionsnamnet, datornamnet och det fullständiga domännamnet för Azure Stack-distributionen:

Environment ResourceManagerURL
Development Kit https://management.local.azurestack.external/
Integrerade system https://management.(region).ext-(machine-name).(FQDN)

Mer information om hur du använder Azure SDK för Go på Azure Stack finns i Use API version profiles with Go in Azure Stack (Använda API-versionsprofiler med Go i Azure Stack)

Använd filbaserad autentisering

Filbaserad autentisering använder ett filformat som genererats av Azure CLI. Du kan enkelt skapa den här filen när du skapar en ny tjänstens huvudnamn med parametern --sdk-auth. Se till att det här argumentet anges när du skapar ett huvudnamn för tjänsten om du tänker använda filbaserad autentisering. Eftersom CLI skriver utdata till stdout kan du dirigera om utdata till en fil.

az ad sp create-for-rbac --role Contributor \
    --scopes /subscriptions/<subscription_id> \
    --sdk-auth > azure.auth

Ange miljövariabeln AZURE_AUTH_LOCATION till platsen där auktoriseringsfilen lagras. Den här miljövariabeln läses av programmet och autentiseringsuppgifterna i den parsas. Om du måste välja auktoriseringsfilen vid körning kan du ändra programmets miljö med hjälp av funktionen os.Setenv.

För att läsa in autentiseringsinformationen anropar du funktionen NewAuthorizerFromFile. Till skillnad från miljöbaserad auktorisering kräver filbaserad auktorisering en resursslutpunkt.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

Mer information om hur du använder huvudnamn för tjänster och hanterar deras åtkomstbehörigheter finns i Skapa ett huvudnamn för tjänsten med Azure CLI.

Använda autentisering med enhetstoken

Om du vill att användarna ska logga in interaktivt är det bästa sättet via autentisering med enhetstoken. Det här autentiseringsflödet skickar användaren en token för att klistra in på en Microsoft-inloggningswebbplats, där de sedan autentiserar med ett Microsoft Entra-konto. Den här autentiseringsmetoden stöder konton som har multifaktorautentisering aktiverat, till skillnad från standardautentisering med användarnamn/lösenord.

Skapa en DeviceFlowConfig-authorizer med funktionen NewDeviceFlowConfig för att använda autentisering med enhetstoken. Anropa Authorizer på det resulterande objektet för att starta autentiseringsprocessen. Enhetens flödesautentisering blockerar programkörningen tills hela autentiseringsflödet är klart.

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

Använd en autentiseringsklient

Om du måste använda en viss typ av autentisering och kan göra så att programmet läser in autentiseringsuppgifter från användaren kan du använda alla klienter som överensstämmer med gränssnittet auth.AuthorizerConfig. Använd en typ som implementerar det här gränssnittet när du:

  • Skriver ett interaktivt program.
  • Använder specialiserade konfigurationsfiler.
  • Har ett krav som förhindrar användning av en inbyggd autentiseringsmetod.

Varning

Hårdkoda aldrig Azure-autentiseringsuppgifter i ett program. Om du lägger in hemligheter i ett programs binärfiler blir det enklare för en angripare att extrahera dem, oavsett om programmet körs eller inte. Alla Azure-resurser som autentiseringsuppgifterna har behörighet för utsätts då för risk!

I följande tabell visas typerna i SDK som överensstämmer med gränssnittet AuthorizerConfig.

Authentication type Authorizer-typ
Certifikatbaserad autentisering ClientCertificateConfig
Klientautentiseringsuppgifter ClientCredentialsConfig
Hanterade identiteter för Azure-resurser MSIConfig
Användarnamn/lösenord UsernamePasswordConfig

Skapa en autentiserare med dess associerade New-funktion och anropa sedan Authorize på det resulterande objektet för att autentisera. För att till exempel använda certifikatbaserad autentisering:

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()

Nästa steg