2016-05-02 7 views
1

Im Folgenden sind die Punkte unter Bezugnahme auf die Azure Netzwerk-API:Wie erhält man Zugriffstoken in Azure für Network Rest API?

Die folgenden Informationen sind für alle Aufgaben gemeinsam:

  1. Ersetzen {api-Version} mit 2015.06.15.
  2. Ersetzen Sie {subscription-id} durch Ihre Subskriptions-ID im URI.
  3. Ersetzen Sie {Ressourcengruppenname} durch die Ressourcengruppe. Weitere Informationen finden Sie unter Verwenden von Ressourcengruppen zum Verwalten Ihrer Azure-Ressourcen.
  4. Legen Sie den Content-Type-Header auf Anwendung/Json.
  5. Legen Sie den Autorisierungsheader auf ein JSON-Web-Token fest, das Sie von Azure Active Directory erhalten.

Ich bin verwirrt über den 5. Punkt. Können Sie mir bitte erklären, wie Sie mithilfe von Azure Active Directory Zugriffstoken erhalten?

Antwort

4

Azure Active Directory basiert auf den oauth Authentifizierungsprotokollen aufgebaut, wie definiert in RFC 6749 The OAuth 2.0 Authorization Framework

Das Konzept Token hinter ist, dass Sie bei einer zentralen Behörde authentifizieren können und dann auf einem separaten System erteilten Berechtigungen, ohne dass um diesem System Ihre Anmeldeinformationen zu geben.

von Service to Service Calls Using Client Credentials

taken from https://msdn.microsoft.com/en-gb/library/azure/dn645543.aspx

In diesem Fall, wenn der Server, der in 3 genannt wurde kompromittiert wurde, würden Anmeldeinformationen immer noch sicher sein, und die Angreifer nur den Zugang zu Ressourcen haben würden, bis das Token abgelaufen . Daher sind Tokens im Allgemeinen kurzlebig.

Sie ein Token, indem Sie eine POST-Anforderung an login.microsoftonline.com mit folgendem Inhalt erhalten

POST contoso.com/oauth2/token HTTP/1.1 
Host: login.microsoftonline.com 
Content-Type: application/x-www-form-urlencoded 

grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F 

Welche die folgende Antwort

{ 
"access_token":"eyJhbGciOiJSUzI1NiIsIng1dCI6IjdkRC1{shorted}", 
"token_type":"Bearer", 
"expires_in":"3599", 
"expires_on":"1388452167", 
"resource":"https://service.contoso.com/" 
} 

Daraus produzieren Sie die Zugriffstoken und die Nutzung nehmen es in Ihrer Anwendung.

Dies ist der Authentifizierungsablauf für Azure und es ist nicht möglich, ihn zu ändern, um einfach ein vorkonfiguriertes Token zu verwenden. Selbst wenn Sie ein Zertifikat verwenden, erhalten Sie trotzdem ein Token und verwenden dieses zur Autorisierung gegen Ressourcen.

+0

Ich arbeite in GoLang.Ich verwende die REST-API von Azure für die Netzwerkverwaltung. Ich bin immer noch verwirrt, wie man Zugangstoken erhält. Ich bin mit allen Schritten fertig, habe AAD erstellt, ihm Rollen/Berechtigungen erteilt. Aber fest, wie man Zugangstoken bekommt. Gibt es eine Möglichkeit, den Zugriffstoken vom Code zu trennen? – Baber

+0

@Baber Ich habe die Antwort auf Ihre Frage geändert –

+0

Vielen Dank. Das hat mir sehr geholfen. Ich werde Sie wieder fangen, wenn ich weitere Hilfe brauchte :) – Baber

0

Sie müssen einen Azure AD-Dienstprinzipal erstellen und anschließend das Token für die Authentifizierung (JWT) abrufen. Das folgende Beispielskript veranschaulicht das Erstellen eines Azure AD-Dienstprinzips über PowerShell. Für eine ausführlichere exemplarische Vorgehensweise verweisen wir auf die Anleitung unter https://azure.microsoft.com/en-us/documentation/articles/resource-group-authenticate-service-principal/#authenticate-service-principal-with-password—powershell. Es ist auch möglich, create a service principal via the Azure portal.

$pwd = “[your-service-principle-password]” 
$subscriptionId = “[your-azure-subscription-id]” 

Login-AzureRmAccount 
Select-AzureRmSubscription -SubscriptionId $subscriptionId 

$azureAdApplication = New-AzureRmADApplication ` 
         -DisplayName “ Demo Web name” ` 
         -HomePage “https://localhost/webdemo” ` 
         -IdentifierUris “https://localhost/webdemo” ` 
         -Password $pwd 

New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId 
New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $azureAdApplication.ApplicationId 

$subscription = Get-AzureRmSubscription -SubscriptionId $subscriptionId 
$creds = Get-Credential -UserName $azureAdApplication.ApplicationId -Message “Please use your service principle credentials” 

Login-AzureRmAccount -Credential $creds -ServicePrincipal -TenantI $subscription.TenantId 

Nicht mit GoLang vertraut, aber Sie können auf den folgenden .NET-Code zugreifen, um das Zugriffstoken für Ihre Anwendung abzurufen.

public static string GetAccessToken() 
{ 
    var authenticationContext = new AuthenticationContext("https://login.windows.net/{tenantId or tenant name}"); 
    var credential = new ClientCredential(clientId: "{client id}", clientSecret: "{application password}"); 
    var result = authenticationContext.AcquireToken(resource: "https://management.core.windows.net/", clientCredential:credential); 

    if (result == null) { 
     throw new InvalidOperationException("Failed to obtain the JWT token"); 
    } 

    string token = result.AccessToken; 

    return token; 
} 
Verwandte Themen