- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Azure AD oAuth 2 身份验证访问 Dynamics CRM Online REST API。为此,我按照以下步骤操作:
- 我已在 Azure 中注册了 Web 应用程序和/或 Web API
- 将 Dynamics CRM 的权限配置为具有委派权限“以组织用户身份访问 CRM Online”
- 并创建了一个有效期为 1 年的 key 并保留生成的客户端 ID。
在 Azure 上配置 Web 应用程序后,我在 .NET/C# 中创建了一个控制台应用程序,它使用 ADAL 发出简单的请求,在本例中是检索帐户列表:
class Program
{
private static string ApiBaseUrl = "https://xxxxx.api.crm4.dynamics.com/";
private static string ApiUrl = "https://xxxxx.api.crm4.dynamics.com/api/data/v8.1/";
private static string ClientId = "2a5dcdaf-2036-4391-a3e5-9d0852ffe3f2";
private static string AppKey = "symCaAYpYqhiMK2Gh+E1LUlfxbMy5X1sJ0/ugzM+ur0=";
static void Main(string[] args)
{
AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(new Uri(ApiUrl)).Result;
var clientCredential = new ClientCredential(ClientId, AppKey);
var authenticationContext = new AuthenticationContext(ap.Authority);
var authenticationResult = authenticationContext.AcquireToken(ApiBaseUrl, clientCredential);
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
var result = httpClient.GetAsync(Path.Combine(ApiUrl, "accounts")).Result;
}
}
我成功检索了访问 token ,但当我尝试向 CRM 发出 httprequest 时,我总是收到 401 - 未经授权的状态代码。我错过了什么?
最佳答案
谢谢大家的回答。我终于设法使用 ADAL 3 访问 Dynamics CRM OData API。
由于许多人在执行此操作时仍然遇到问题,请参阅以下步骤:
使用 Dynamics CRM 订阅的 Office 365 管理员用户登录 portal.azure.com
。
转到 Azure Active Directory\应用程序注册并添加新应用程序注册
输入“名称”和“登录 URL”,URL 可以是任何内容(例如 https://localhost)
选择您刚刚创建的注册应用,前往“Settings\Keys”
输入 key 描述,单击“保存”并复制值(并保留它,因为稍后需要它)。另请复制已注册应用程序的应用程序 ID。
转到“所需权限”,点击“添加”,选择“Dynamics CRM Online”,然后勾选“以组织用户身份访问 CRM Online”。
这些步骤使客户端应用程序能够使用应用程序 ID 和您在步骤 5 中创建的客户端 key 来访问 Dynamics CRM。您的客户端应用程序现在可以根据 Azure AD 进行身份验证,并获得访问 CRM Online 的权限。但是,CRM Online 不知道此“客户端应用程序”或“用户”。如果您尝试访问 CRM API,它将响应 401。
要让 CRM 了解“客户端应用程序”或“用户”,您需要添加应用程序用户。
转至 CRM\安全角色,创建新的安全角色或仅复制“系统管理员”角色
转到 CRM\Settings\Security\Users,创建一个新用户,将表单更改为“应用程序用户”
使用您在上一步中获得的应用程序 ID 输入必填字段。保存后,CRM 将自动填充 Azure AD 对象 ID 和 URI。
将用户添加到上一步创建的安全角色中。
现在您应该能够使用下面的示例代码使用 HttpClient 和 ADAL 访问 CRM API:
var ap = await AuthenticationParameters.CreateFromResourceUrlAsync(
new Uri("https://*****.api.crm6.dynamics.com/api/data/v9.0/"));
String authorityUrl = ap.Authority;
String resourceUrl = ap.Resource;
var authContext = new AuthenticationContext(authorityUrl);
var clientCred = new ClientCredential("Application ID", "Client Secret");
var test = await authContext.AcquireTokenAsync(resourceUrl, clientCred);
Console.WriteLine(test.AccessToken);
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", test.AccessToken);
var response = await client.GetAsync("https://*****.api.crm6.dynamics.com/api/data/v9.0/contacts");
var contacts = await response.Content.ReadAsStringAsync();
Console.WriteLine(contacts);
}
关于rest - 401-使用 REST API Dynamics CRM 和 Azure AD 进行未经授权的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215742/
我们使用的是在线版 CRM。我已经创建了一个自定义工作流,但我似乎无法找到任何可以告诉我如何调试它的信息。我读过的所有内容都是指将 pdb 文件复制到服务器 bin/assemblies 文件夹中。由
我正在尝试将 crm 4 插件转换为 CRM 2011。有谁知道 CRm 2011 中的相应类型是什么? Customer, CrmDateTime, CrmDecimal, CrmFloat, CB
我正在尝试将 crm 4 插件转换为 CRM 2011。有谁知道 CRm 2011 中的相应类型是什么? Customer, CrmDateTime, CrmDecimal, CrmFloat, CB
我们在 CRM 2015 中有特定要求,我们需要限制非 S/S 管理员用户在业务流程中的向后移动。 我遍历了客户端 API(包括升级 1 的脚本),但我没有找到任何 API 来使用任何公开的方法来实现
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
必须从另一个 webresoucre 控件访问 Webresource 控件使用了以下 javascript , var webResource = $(window.parent.Xrm.Pag
在将解决方案从 CRM 2011 升级到 CRM 2015 时,我只将 crm 2011 解决方案导出 zip 中生成的 solution.xml 文件的标题更改为 然后导入crm 2015,导入成
我在 BIDS 中创建了大量报告,并将它们部署到我的 CRM 在线实例中。我遇到的问题是以下代码。 看起来很简单,但它给了我以下错误。 无效数据源:不支持报告类型。 Micro
我有一个与 this post 非常相似的问题 我已经为 Dynamics CRM 2015 安装了“Microsoft Dynamics CRM Report Authoring Extension
在我开始之前,我们的客户必须通过 AFDS 连接才能继续使用 CRM 2011。所以我们谈论的是“IFD”环境。 我在使用“CRM 2011 Outlook Client”和“Window.Open(
我注册了 Dynamic CRM 在线试用版(30 天)并创建了一个非托管自定义解决方案(新字段、一些自定义实体等)。现在,我想导出非托管解决方案并将其导入到我的服务器中的 Dynamic CRM O
我们正在 MS Dynamics CRM 2015 中对自引用实体进行建模。 一个例子是建筑物和建筑物的一部分(建筑群 ==> 独立建筑 ==> 入口 ==> 楼层 ==> 平面)。 有一些字段,如成
我们有一个系统,用户可以在其中以表格形式输入他的数据,然后我们将数据保存在 CRM 中(它在云中,因此我们无法访问它等等)。现在突然我们每次都开始出错,我们尝试发送数据。 我们得到的错误是:An un
我刚刚加载了高级查找,我无法点击一半的图标/下拉菜单,因为它们都在错误的位置。它在其他服务器和其他机器上运行良好。看起来好像是 CSS 问题。有任何想法吗 最佳答案 我在 Firefox 中遇到了同样
我正在使用带有简单 OData 的 Ms Dynamic Web Api。我需要为链接实体添加新记录。 我正在使用下面的代码片段并引用文档 https://github.com/object/Simp
我在 Dynamics CRM 中的客户和投资组合之间存在 1:N 关系即每个账户都有多个投资组合,每个投资组合都有特定的 Assets 。 我正在尝试在账户表格上创建一个字段,用于计算账户“所有相关
我在更新案例表单上 customerid 字段内的文本时遇到问题 如上图所示,我创建了一个名为“Test Contact”的联系人和一个名为“Test Account”的帐户。 我有一个在后台运行的工
爱尔兰于 3 月 27 日开始实行夏令时。从那时起,任何已添加到 Dynamics 的记录都将任何日期字段设置为比实际添加时间晚一小时。 奇怪的是,Web UI 正确返回日期,而使用 SQL Serv
我需要能够扩展在云中运行的 CRM 2011。我需要能够从一个完全独立的 Internet 网站执行 CRUD 操作。我有什么选择?我对 CRM 的经验为零。我刚刚发现 OOB Web 服务只能在 C
好吧,想象一下一家银行的调用中心充满了低信任度的员工。工作人员需要通过电话为客户提供基本服务。调用中心的工作人员接听客户的电话,询问他们某些安全问题,然后以某种方式为客户提供服务。 现在,从客户的角度
我是一名优秀的程序员,十分优秀!