2015-11-25 1 views
1

J'ai suivi les instructions fournies dans le document d'authentification de l'application Web BI de puissance et suis en mesure d'obtenir le jeton d'authentification. Mais la procédure nécessite que l'utilisateur t entrer les informations d'identification dans GUI pour obtenir le code d'authentification. Au lieu de cela, je souhaite effectuer une authentification silencieuse, c'est-à-dire sans authentification par interface graphique. J'ai essayé des approches de couple comme en utilisant HHTPClient et le code de référence dans le lien ci-dessousObtenir l'accèsToken de la BI d'alimentation sans authentification GUI

https://gist.github.com/dquig/a4f2f02fe3e306cebe2e

Mais il demande client_secret, malheureusement, il n'y a pas de méthode accepter cleint_secret avec ResourceURI, clientId, nom d'utilisateur, mot de passe, rappel. am En utilisant azure adal4j de la version 1.0.0. Est-ce un problème de version? Toute aide sera grandement aprécié

Répondre

0

Je pense que vous voulez regarder ce blog: http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/

Les API de bibliothèque client .NET ADAL ont maintenant la méthode qui acceptent le nom d'utilisateur et mot de passe. L'article inclut une liste de toutes les contraintes et limitations. Si votre utilisation ne tombe pas dans le bon chemin, je pense que vous devrez inviter l'utilisateur.

Je devrais mentionner que si vous stockez le jeton d'actualisation pour l'utilisateur, vous devriez seulement les inviter une fois tous les 90 jours (ou chaque fois que le jeton d'actualisation expire).

+0

J'ai essayé cette approche mais elle demande client_silent avec tous les autres identifiants comme, ClientId, nom d'utilisateur, mot de passe. Plus d'essayer d'utiliser Java. J'ai donné le lien dans mon post original l'approche que j'ai essayée. Ce qui est exactement la même chose que ce que vous avez mentionné. – user4130072

0

En raison de l'utilisation de l'application Client pour obtenir le jeton d'accès Azure AD, il est nécessaire de saisir le nom d'utilisateur et le mot de passe lors de l'authentification de l'interface graphique. Si vous suivez l'authentification de l'application Web (https://msdn.microsoft.com/en-us/library/mt143610.aspx) pour effectuer l'authentification, elle répond à l'exigence client_secret. J'ai donc utilisé le point de terminaison https://login.microsoftonline.com/<tenantId>/oauth2/token pour obtenir un jeton d'accès de Power BI et créer un exemple d'application console en Java.

Voici ma configuration des dépendances maven ci-dessous dans le fichier pom.xml. C'est très bien d'utiliser Azure adal4j de la version 1.0.0, mais suggère de mettre à jour la dernière version.

<dependencies> 
    <dependency> 
     <groupId>com.microsoft.azure</groupId> 
     <artifactId>adal4j</artifactId> 
     <version>1.1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.5.1</version> 
    </dependency> 
</dependencies> 

Et l'exemple de code ci-dessous.

String clientId = "<clientId>"; 
String clientSecret = "<key>"; 
String tenantId = "<tenantId>"; 
String authority =String.format("https://login.microsoftonline.com/%s/oauth2/token", tenantId); 
String resource = "https://analysis.windows.net/powerbi/api"; 
AuthenticationContext context = null; 
AuthenticationResult result = null; 
ExecutorService service = null; 
try { 
    service = Executors.newFixedThreadPool(1); 
    context = new AuthenticationContext(authority, false, service); 
    ClientCredential credential = new ClientCredential(clientId, clientSecret); 
    Future<AuthenticationResult> future = context.acquireToken(resource, credential, null); 
    result = future.get(); 
} finally { 
    service.shutdown(); 
} 
String accessToken = null; 
if (result == null) { 
    throw new ServiceUnavailableException("authentication result was null"); 
} else { 
    accessToken = result.getAccessToken(); 
    System.out.println("Access Token: " + accessToken); 
} 

Toute préoccupation, n'hésitez pas à me le faire savoir.


Mise à jour pour C#:

public static string GetAccessToken() 
{ 
    var authenticationContext = new AuthenticationContext("{authorityURL}"); 
    var credential = new ClientCredential(clientId: "{application id}", clientSecret: "{application password}"); 
    var result = authenticationContext.AcquireToken(resource: "{resourceURL}", clientCredential:credential); 

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

    string token = result.AccessToken; 

    return token; 
} 

S'il vous plaît voir la référence pour AuthenticationContext.AcquireTokenhttps://msdn.microsoft.com/en-us/library/dn479466.aspx.

+0

J'essaie cela en C# avec ce code, mais je reçois toujours 403 Interdit string authority = String.Format ("https: //login.microsoftonline.com/{0}/auth2/jeton "TenantID); AuthenticationContext authenticationContext = new AuthenticationContext (autorité); titres de compétence ClientCredential = new ClientCredential (clientId, clientSecret); AuthenticationResult résultat = authenticationContext.AcquireToken (ressource:" https://analysis.windows.net/powerbi/api ", clientCredential: credential); –

+0

@ChrisHarrington Il y avait un exemple pour PowerBI en C# auquel vous pouvez vous référer, s'il vous plaît voir https://github.com/Microsoft/PowerBI -Chargeur/blob/master/samples/consoleapp/démarrage-pour-dotnet/PBIGettingStarted/PBIGettingStarted/Program.cs.Vous pouvez également essayer d'utiliser une API REST enveloppée par une bibliothèque tierce pour PowerBI comme référence, voir https://github.com/Vtek/PowerBI.Api.Client –

+0

Tous ces échantillons nécessitent e l'utilisateur à se connecter. J'ai besoin de coder une authentification non interactive puisque ce travail s'exécute sur une planification. –

0

Si vous enregistrez votre application en tant qu'application client native, vous devrez fournir un secret client. Vous pourrez alors utiliser le nom d'utilisateur et le mot de passe sans passer par la connexion interactive.