에 ClientCredentials를 사용하여 토큰을 가져올 수 없습니다 및 클라이언트 자격 증명을 얻고 이하의 코드를에서 사용하기 위해 푸른 그것을 등록 :AcquireTokenAsync 방법 - 나는 CRM에서 데이터를 검색하려면 여기
using Microsoft.Crm.Sdk.Messages;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.WebServiceClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CRM_WebAPI_Test1
{
class Program
{
static void Main(string[] atrgs)
{
MainAsync();
}
static async void MainAsync()
{
try
{
string organizationUrl = "https://OrgName<<URL>>.com";
string clientId = "xxxxxxxxx-xxxx-xxxx-b7ca-xxxx";
string clientSecret = "key received from Azure App Registration";
string aadInstance = "https://login.microsoftonline.com/";
string tenantID = "orgname";
ClientCredential clientCredentials = new ClientCredential(clientId, clientSecret);
AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance + tenantID);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(organizationUrl, clientCredentials);
var requestedToken = authenticationResult.AccessToken;
using (var sdkService = new OrganizationWebProxyClient(GetServiceUrl(organizationUrl), false))
{
sdkService.HeaderToken = requestedToken;
OrganizationRequest request = new OrganizationRequest()
{
RequestName = "WhoAmI"
};
WhoAmIResponse response = sdkService.Execute(new WhoAmIRequest()) as WhoAmIResponse;
Console.WriteLine(response.UserId);
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
}
}
static private Uri GetServiceUrl(string organizationUrl)
{
return new Uri(organizationUrl + @"/xrmservices/2011/organization.svc/web?SdkClientVersion=8.2");
}
}
}
를하지만 때를 행 온 :
authenticationResult authenticationResult = authenticationContext.AcquireTokenAsync (organizationUrl, clientCredentials)을 기다리고;
프로그램을 직접 출력하고 출력을 제공하지 않으며 catch 예외 부분에 도달하지 않습니다. 내가 여기서 누락 된 것이 있습니까?
또한 Azure AD에 응용 프로그램을 등록하는 동안 임차인 이름을 아는 방법은 무엇입니까?
UPDATE :는 [코멘트 섹션에서 전체 오류를 기록 할 수없는이 때문에 맨 손으로하시기 바랍니다 있기 때문에 문제의 업데이트.]는 다음과 같이 오류를 던지고 제안으로 코드를 변경 적용한 후 :
마이크로 소프트 .IdentityModel.Clients.ActiveDirectory.AdalServiceException : AADSTS50001 : https://orgname.com이라는 응용 프로그램이 mydirectory.onmicrosoft.com이라는 테넌트에없는 이라는 이름의 응용 프로그램입니다. 응용 프로그램이 임차인의 관리자에 의해 설치되지 않았거나 임차인의 모든 사용자가 동의 한 경우 이 발생할 수 있습니다. 이 잘못된 임차인에게 인증 요청을 보냈을 수 있습니다. 추적 ID : 58b1b994-eac3-4209-b553-4cea6a120500 상관 관계 ID : fb8a3f3a-8b0c-4cea-90fa-88ea6e9a7208 타임 스탬프 : 2017년 11월 29일 09 : 09 : 37Z ---> System.Net.Http.HttpRequestException : 응답 상태 코드가 성공을 나타내지 않습니다 : 400 (BadRequest). ---> Microsoft.IdentityModel.Clients.ActiveDirectory.AdalException : { "오류": "invalid_resource", "ERROR_DESCRIPTION": "AADSTS50001 : https://orgname.com를라는 응용 프로그램이라는 임차인에서 찾을 수 없습니다 mydirectory.onmicrosoft.com 이는 응용 프로그램이 임차인 의 관리자가 설치하지 않았거나 임차인의 사용자가 동의하지 않은 경우 발생할 수 있습니다. 인증 요청을 잘못된 임차인에게 보냈을 수 있습니다. \ r \ nTrace ID : 58b1b994 - eac3-4209-b553-4cea6a120500 \ r \ n 상관 관계 ID : fb8a3f3a-8b0c-4cea-90fa-88ea6e9a7208 \ r \ nTimestamp : 2017-11-29 09 : 09 : 37Z ","error_codes ": [50001], '타임 스탬프': '2017-11-29 09 : 09 : 37Z ","trace_id ":"58b1b994-eac3-4209-b553-4cea6a120500 ","correlation_id ":"fb8a3f3a-8b0c-4cea-90fa-88ea6e9a7208 "} : 알 수없는 오류 --- 내부 예외 스택 추적 끝 --- Microsoft.IdentityModel.Clients.ActiveDirectory.HttpClientWrapper.d__31.MoveNext() 에서 --- 내부 예외 스택 추적의 끝 --- Microsoft.IdentityModel.Clients.ActiveDirectory.AdalHttpClient.d__22
1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.IdentityModel.Clients.ActiveDirectory.AdalHttpClient.<GetResponseAsync>d__21
1.MoveNext() 에서 - - 에서 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification에서 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업)에서 예외가 발생 된 이전 위치 ---에서 스택 추적의 끝 (작업 작업) Microsoft.IdentityModel.Clients.ActiveDirectory.A cquireTokenHandlerBase.d__71. System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification에서 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업)에서 MoveNext는() --- 예외가 발생 된 이전 위치에서 스택 추적의 끝 --- (작업 Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.d__68.MoveNext() --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess에서 예외가 발생 된 이전 위치에서 스택 추적 --- 끝 (에서 작업) 작업 작업)에서 에서 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업)에서 마이크로 oft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.d__59.MoveNext() --- 예외가 throw 된 이전 위치의 스택 추적 끝 --- 에서 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.d__57.MoveNext에서 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (작업 일)
에서 (작업 작업)() --- 예외가 throw 된 이전 위치에서 스택 추적 끝 --- 에서 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.d__33.MoveNext() --- 예외가 있었다 이전 위치에서 스택 추적의 끝에서 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업)에서 6,작업) Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.d__58에서 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification에서 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업) (작업 작업)에서 --- 발생합니다. MoveNext() --- 예외가 발생한 이전 위치의 스택 추적 끝 --- 시스템 CRM_WebAPI_Test1.Program.d__1에서 .Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification에서 (작업 작업) System.Runtime.CompilerServices.TaskAwaiter`1.GetResult (에서 (작업 작업)) E에서 .MoveNext() : \ VS_2015 \ CRM 프로젝트 \ CRM_WebAPI_Test1 \ CRM_WebAPI_Test1 \ Program.cs : 라인 31 ErrorCode가 : 상태 코드 invalid_resource : 첫째 400
'organizationUrl'은 다음과 같습니다 :'https : // contoso.crm.dynamics.com'? – juunas
아니요, 조직에서 만든 평가판 계정입니다. 'contoso.crm'대신에 나머지는 동일합니다. –
알겠습니다. URI는 https : // yourorganisationname.crm.dynamics.com이어야합니다. – juunas