2016-12-21 4 views
0

Ich bin mit Azure-API in C# -Code und unterhalb BibliothekenAzure-API-Authentifizierung

using Microsoft.Rest; using Microsoft.Rest.Azure.Authentication; 

using Microsoft.Azure.Management.DataLake.Store; 

using Microsoft.Azure.Management.DataLake.StoreUploader; 

using Microsoft.Azure.Management.DataLake.Analytics; 

using Microsoft.Azure.Management.DataLake.Analytics.Models; 

using Microsoft.WindowsAzure.Storage.Blob; 

erstellen Verbindung mit Azure,

private static ServiceClientCredentials AuthenticateAzure(string domainName, string nativeClientAppCLIENTID) 
    { 
     // User login via interactive popup 
     SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); 
     // Use the client ID of an existing AAD "Native Client" application. 
     var activeDirectoryClientSettings = ActiveDirectoryClientSettings.UsePromptOnly(nativeClientAppCLIENTID, new Uri("urn:ietf:wg:oauth:2.0:oob")); 
     return UserTokenProvider.LoginWithPromptAsync(domainName, activeDirectoryClientSettings).Result; 
    } 

Dadurch bekam ich das Popup verwendet, die meine Zugangsdaten fragen. Ich möchte nicht, dass dieses Pop-up jedes Mal erscheint. Gibt es eine Möglichkeit, neben der Erstellung der Azure App auch etwas anderes zu tun?

======================================

Ich habe ID Anwendung , TenantId und andere Sache. Wird mir das helfen, mich ohne Aufforderung zu authentifizieren?

enter image description here

+0

Es gibt Anweisungen hier, wie ServicePrinicpal zu schaffen, dies zu tun http://blog.davidebbo.com/2015/12/calling-arm-using -plain-rest.html –

Antwort

3

Wir können die Funktion nutzen UserTokenProvider.LoginSilentAsync(nativeClientAppClientid, domainName, userName, password) unsere Anmeldeinformationen ohne Pop-up zu erhalten. Es funktioniert gut für mich, das folgende ist mein Testcode. Wie zur Registrierung WebApp finden Sie unter document.

static void Main(string[] args) 
    { 
     var certificate = AuthenticateAzure("your domain name", "Ad App client ID", "username", "password"); 
    } 

    /// <summary> 
    /// Log in to azure active directory in non-interactive mode using organizational 
    // id credentials and the default token cache. Default service settings (authority, 
    // audience) for logging in to azure resource manager are used. 
    /// </summary> 
    /// <param name="domainName"> The active directory domain or tenant id to authenticate with</param> 
    /// <param name="nativeClientAppClientid"> The active directory client id for this application </param> 
    /// <param name="userName"> The organizational account user name, given in the form of a user principal name (e.g. [email protected]).</param> 
    /// <param name="password"> The organizational account password.</param> 
    /// <returns>A ServiceClientCredentials object that can be used to authenticate http requests using the given credentials.</returns> 
    private static ServiceClientCredentials AuthenticateAzure(string domainName, string nativeClientAppClientid,string userName,string password) 
    { 
     return UserTokenProvider.LoginSilentAsync(nativeClientAppClientid, domainName, userName, password).Result; 
    } 

enter image description here

Update:

Weitere Details Schritte wie AD App in der Registrierung und zuweisen Rolle Anwendung finden Sie in document. Danach können wir tenantId, appId, secretKey aus dem Azure-Portal abrufen. Dann können wir Microsoft.IdentityModel.Clients.ActiveDirectory SDK verwenden, um Token für API-Authentifizierung zu erhalten.

Demo-Code:

var subscriptionId = "Your subscrption"; 
var appId = "Registried Azure Application Id"; 
var secretKey = "Secret Key"; 
var tenantId = "tenant Id"; 
var context = new AuthenticationContext("https://login.windows.net/" + tenantId); 
ClientCredential clientCredential = new ClientCredential(appId, secretKey); 
var tokenResponse = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result; 
var accessToken = tokenResponse.AccessToken; 
using (var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); 
    client.BaseAddress = new Uri("https://management.azure.com/"); 
    // Now we can party with our HttpClient! 
} 

enter image description here

+0

Ich verwende Azure-APIs für ADLS-Dateizugriff und für einige Dateimanipulation und möchte mit U-SQL-Projekt integrieren. Was wäre der "Domain-Name" in diesem Fall? Zweitens. Ich möchte keine App im Azure-Portal registrieren. – Ajay

+0

Azure ermöglicht auch die Verwendung eines selbstsignierten Verwaltungszertifikats oder Azure AD zur Authentifizierung. Weitere Informationen zu Windows Azure Management-Zertifikaten finden Sie in [Dokument] (https://www.simple-talk.com/cloud/security-and-compliance/windows-azure-management-certificates/). Domänenname: 'Standardmäßig ist ein einfacher Domänenname unter .onmicrosoft.com in Ihrem Verzeichnis enthalten. Später können Sie einen Domänennamen hinzufügen, den Ihre Organisation bereits verwendet, z. B. "contoso.com". –

+0

Ich habe Anwendungs-ID, TenantId und andere Dinge. Wird mir das helfen, mich ohne Aufforderung zu authentifizieren? Ich habe meine Frage bearbeitet und ein Bild angehängt .. Können Sie mir bitte auf dieser Linie helfen .. Danke ... – Ajay