如何使用ADAL,NetStandard和Azure AD在没有提示CRM Dynamics Online Web服务的情况下进行身份validation

我目前正在尝试创建一个Xamarin应用程序,以便从Dynamics 365在线实例中获取一些信息。 使用AD进行身份validation并访问CRM API的代码将在NetStandard(v1.6)库中逐出。

我使用以下NuGets:

  • Microsoft.IdentityModel.Clients.ActiveDirectory(3.13.9)
  • NETStandard.Library(1.6.1)

我按照以下教程将AD与我的Dynamics实例链接: https : //nishantrana.me/2016/11/13/register-a-dynamics-365-app-with-azure-active-directory/

这是我的ActiveDirectory助手:

public static class ADHelper { public async static Task GetAuthAsync(Uri uri, ClientCredential creditential) { AuthenticationParameters ap = await AuthenticationParameters.CreateFromResourceUrlAsync(uri); String authorityUrl = ap.Authority; String resourceUrl = ap.Resource; AuthenticationResult result = null; AuthenticationContext authContext = new AuthenticationContext(authorityUrl, false); result = await authContext.AcquireTokenAsync(resourceUrl, creditential); return result; } } 

和我的CRM API客户端:

 public class CRMClient { private AuthenticationResult Auth { get; set; } private Uri baseUri { get; set; } public CRMClient(Uri uri, ClientCredential creditential) { baseUri = uri; Auth = ADHelper.GetAuthAsync(uri, creditential).Result; } public void getObject() { using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Auth.AccessToken); client.Timeout = new TimeSpan(0, 2, 0); client.BaseAddress = baseUri; HttpResponseMessage message = client.GetAsync("/accounts").Result; String content = message.Content.ReadAsStringAsync().Result; } } 

用于CRMClient构造函数的参数:

  • https:// [my_crm_instance_Url] /api/data/v8.2/ =>数据OData端点
  • ClientCredential(AppId,AppKey)=>作为凭证

Azure AD给了我一个令牌,但UserInfo,TenantId和idToken都是null (这可能是我的问题的一部分原因)。

目前,返回的内容是HTML Office 365登录页面,而不是我想要获取的数据。

有人能帮帮我吗?