2017-03-29 2 views
1

Je possède un compte de sentiers crm msdynamics, enregistrer mon Crm dans Azure Active Directory application web/api et url comme http://localhost et je lui ai donné la permission pour Dynamic CRM en ligne en vérifiant le délégué autorisation.dynamique Ms API Web 401 Unauthorized

Ci-dessous le code que je utilise pour obtenir le access_token

private static AuthenticationResult getAccessTokenFromUserCredentials() throws Exception { 
    AuthenticationContext context = null; 
    AuthenticationResult result = null; 
    ExecutorService service = null; 
    try { 
     service = Executors.newFixedThreadPool(1); 
     context = new AuthenticationContext(AUTHORITY, false, service); 
     /* 
     * Replace {client_id} with ApplicationID and {password} with 
     * password that were used to create Service Principal above. 
     */ 
     ClientCredential credential = new ClientCredential(CLIENT_ID,CLIENT_SECRET); 

     Future<AuthenticationResult> future = context.acquireToken("https://XXXXXXXX.api.crm8.dynamics.com", 
       credential, null); 
     result = future.get(); 
    } finally { 
     service.shutdown(); 
    } 
    if (result == null) { 
     throw new ServiceUnavailableException("authentication result was null"); 
    } 
    return result; 
} 

Maintenant, je reçois le access_token et le code que je utilise pour charger des prospects ..

URL url = new URL(RESOURCE + "/api/data/v8.0/opportunities?$select=name,&$expand=parentcontactid($select=contactid,firstname,lastname,jobtitle,company,emailaddress1,telephone1,telephone2)&$filter=statecode%20eq%200"); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("GET"); 
     connection.setRequestProperty("Authorization", "Bearer " + token); 
     connection.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
     connection.setRequestProperty("OData-MaxVersion", "4.0"); 
     connection.addRequestProperty("OData-Version", "4.0"); 


     int responseCode = connection.getResponseCode(); 
     System.out.println("res code : "+ responseCode); 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(connection.getInputStream())); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 

Mais j'obtiens le code de réponse 401 Non autorisé. Est-ce que quelqu'un peut m'aider s'il vous plait?

+1

WebAPI est vraiment destiné à être utilisé à partir du CRM à l'intérieur. De l'extérieur, vous êtes mieux d'utiliser le Xrm.Tooling.Connector (ex-Xrm.Client) – Alex

+0

Mais je dois le connecter via api de repos, je ne suis pas censé utiliser le point de terminaison de savon J'ai résolu cette utilisation en assignant rôle et en ajoutant cet ID de client AAD à l'utilisateur de l'application CRM. Mais maintenant tâche est que je ne devrais pas utiliser Azure ClientID et ClientSecret plutôt d'utiliser les informations d'identification CRM (nom d'utilisateur/mot de passe) pour se connecter au CRM. Toute aide serait appréciée .. – Jagan

Répondre

1

Je pense que votre config a un problème.

J'ai ma réponse complète dans un autre à stackoverflow poste, s'il vous plaît vérifier mon poste de réponse: https://stackoverflow.com/a/43164164/1063168

+0

Merci l'homme, j'ai compris le problème de configuration que je devais ajouter l'identifiant du client à l'utilisateur du CRM. J'ai besoin de savoir Y at-il un moyen possible de connecter dynamique CRM en utilisant uniquement les informations d'identification CRM (c'est-à-dire .Nom d'utilisateur et mot de passe) et sans AAD clientId et ClientSecret. – Jagan