如何使用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登录页面,而不是我想要获取的数据。
有人能帮帮我吗?