【发布时间】:2016-09-09 23:44:52
【问题描述】:
我正在尝试使用 Azure AD oAuth 2 身份验证访问 Dynamics CRM Online REST API。为此,我遵循了以下步骤:
- 我在 Azure 中注册了一个 Web 应用程序和/或 Web API
- 将 Dynamics CRM 的权限配置为具有“以组织用户身份访问 CRM Online”的委派权限
- 并创建了一个有效期为 1 年的密钥并保持生成的客户 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;
}
}
我成功检索了访问令牌,但是当我尝试向 CRM 发出 httprequest 时,我总是收到 401 - 未授权状态代码。我错过了什么?
【问题讨论】:
-
我相信它对令牌的权限不正确。您正在做的是使用应用程序凭据来获取包含。您在添加 CRM 时选择的权限是 Delegated PErmissions。两者都是不同的东西。如果使用同一目录下用户的 User Creds 进行身份验证和访问会怎样?
-
我之前创建了一个本地客户端应用程序,并成功地与 CRM 集成,但我必须提供用户凭据才能从 Azure 获取令牌。我的目标是完全避免使用用户凭据。为此,我试图通过密钥交换(我在帖子中解释的方法)或通过证书获取令牌。
-
是的。但是该教程仅适用于创建本机客户端应用程序,您始终必须为此提供用户凭据才能检索令牌。我正在尝试使用密钥或证书身份验证来获取令牌,就像 site 在 3 和 7 中解释的那样:
-
你有什么发现吗?
标签: rest azure oauth-2.0 dynamics-crm adal