【问题标题】:Trying Web API Dynamics 365 CRM - 403-Forbidden error尝试 Web API Dynamics 365 CRM - 403-禁止错误
【发布时间】:2021-02-19 14:41:40
【问题描述】:

我正在尝试关注一些有关使用 Web API 与 Dynamics 365 CRM 集成的 MS 文档,但由于我的组织使用不易连接的多因素身份验证方法,我遇到了困难。

我已经尝试在代码中使用应用密码,但失败了。 已经在 Azure AD 上注册了应用,授予了权限,修改了清单,生成了密钥。

我基于 MS 文档所做的最后一次尝试是

`使用 Microsoft.IdentityModel.Clients.ActiveDirectory; 使用 System.Net.Http.Headers; 使用 System.Net.Http; 使用 Newtonsoft.Json.Linq; 使用系统; 使用 System.Configuration; 使用 Newtonsoft.Json; 使用静态 System.Console; 命名空间 CRM_WebApi { 课堂节目 { 静态无效主要(字符串 [] 参数) { 字符串 serviceUrl = "https://MY-ORG.api.crm.dynamics.com"; string clientId = "f8dea8ad-b993-4161-8743-***********X"; 字符串秘密 = "X*x*x*x*x*_lm2_DUo.0Dj_5_Wvkgu~eAY4"; 字符串 redirectUrl = "http://localhost"; AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/MY-ORG/oauth2/authorize"); ClientCredential credential = new ClientCredential(clientId, secret); AuthenticationResult 结果 = authContext.AcquireToken(serviceUrl, credential); //访问令牌 字符串 accessToken = result.AccessToken; 使用(HttpClient 客户端 = 新 HttpClient()) { client.BaseAddress = new Uri(serviceUrl); client.Timeout = new TimeSpan(0, 2, 0); //2分钟 client.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); client.DefaultRequestHeaders.Add("OData-Version", "4.0"); client.DefaultRequestHeaders.Accept.Add( 新的 MediaTypeWithQualityHeaderValue("application/json")); HttpRequestMessage 请求 = 新的 HttpRequestMessage(HttpMethod.Get, "/api/data/v9.1/WhoAmI"); //设置访问令牌 request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); HttpResponseMessage 响应 = client.SendAsync(request).Result; 如果(响应。IsSuccessStatusCode) { //获取响应内容并解析。 JObject body = JObject.Parse(response.Content.ReadAsStringAsync().Result); Guid userId = (Guid)body["UserId"]; Console.WriteLine("您的系统用户 ID 为:{0}", userId); } } } } }`

这次我得到了令牌,但得到了响应 403-Forbidden。

{StatusCode: 403, ReasonPhrase: 'Forbidden', 版本: 1.1, 内容: System.Net.Http.StreamContent, 标头:{ x-ms-service-request-id: 51067dc4-670c-4417-84b6-600044745e18
x-ms-service-request-id: 04dd42b7-898d-4935-9c7e-20c1e7028a10
严格的传输安全性:max-age=31536000; includeSubDomains REQ_ID: 04dd42b7-898d-4935-9c7e-20c1e7025b20
AuthActivityId:fb3e62d9-4e1e-405f-846a-711e6ccc5555
X-来源:18921112101886374119914120471128195219221222118018411711623541331812331911702441xxx* X-来源:2441011722446104156421301162318117713035251169236256193231163106232101179236129xxx
公共:OPTIONS、GET、HEAD、POST Timing-Allow-Origin:* 日期:2020 年 11 月 6 日星期五 20:56:25 GMT
设置 Cookie:ARRAffinity=f439e98480c5c889aa462a387e36ac04f192110c01737e1e00da32e45cedxx; 域=MY-ORG.api.crm.dynamics.com;路径=/; 安全的; HttpOnly 内容长度:89 允许:OPTIONS 允许:GET 允许:HEAD 允许:POST}}

有人遇到过类似的问题吗?你能指导我解决这个问题吗?

【问题讨论】:

  • 嗨,您有机会查看我的答案吗?如果它有帮助,您可以将其标记为已接受。谢谢。

标签: c# azure-active-directory dynamics-crm microsoft-dynamics webapi


【解决方案1】:

根据您的代码,您指的是 Connect as an app 以获取访问令牌。

请注意文档声明:

在注册应用程序时,您遵循的许多相同步骤在 演练:向 Azure Active Directory 注册应用程序,使用 以下例外情况

您无需授予以组织用户身份访问 Dynamics 365 权限。

此应用程序将绑定到特定的用户帐户。

因此您无需在 Azure AD 应用中添加委派权限。你需要做的是Common Data Service user account bound to the registered appManually create a Common Data Service application user

之后,您可以获得具有足够权限的访问令牌。

【讨论】:

  • 并记住赋予应用程序用户安全角色以访问资源。
猜你喜欢
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 2020-02-17
  • 2019-08-12
  • 2013-03-15
相关资源
最近更新 更多