gpt4 book ai didi

rest - 401-使用 REST API Dynamics CRM 和 Azure AD 进行未经授权的身份验证

转载 作者:行者123 更新时间:2023-12-03 23:31:54 24 4
gpt4 key购买 nike

我正在尝试使用 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。

由于许多人在执行此操作时仍然遇到问题,请参阅以下步骤:

应用程序注册

  1. 使用 Dynamics CRM 订阅的 Office 365 管理员用户登录 portal.azure.com

  2. 转到 Azure Active Directory\应用程序注册并添加新应用程序注册

  3. 输入“名称”和“登录 URL”,URL 可以是任何内容(例如 https://localhost)

  4. 选择您刚刚创建的注册应用,前往“Settings\Keys”

  5. 输入 key 描述,单击“保存”并复制值(并保留它,因为稍后需要它)。另请复制已注册应用程序的应用程序 ID。

  6. 转到“所需权限”,点击“添加”,选择“Dynamics CRM Online”,然后勾选“以组织用户身份访问 CRM Online”。

这些步骤使客户端应用程序能够使用应用程序 ID 和您在步骤 5 中创建的客户端 key 来访问 Dynamics CRM。您的客户端应用程序现在可以根据 Azure AD 进行身份验证,并获得访问 CRM Online 的权限。但是,CRM Online 不知道此“客户端应用程序”或“用户”。如果您尝试访问 CRM API,它将响应 401。

添加 CRM 应用程序用户

要让 CRM 了解“客户端应用程序”或“用户”,您需要添加应用程序用户。

  1. 转至 CRM\安全角色,创建新的安全角色或仅复制“系统管理员”角色

  2. 转到 CRM\Settings\Security\Users,创建一个新用户,将表单更改为“应用程序用户”

  3. 使用您在上一步中获得的应用程序 ID 输入必填字段。保存后,CRM 将自动填充 Azure AD 对象 ID 和 URI。

  4. 将用户添加到上一步创建的安全角色中。

现在您应该能够使用下面的示例代码使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com