我有一个网络应用程序需要与Dynamics CRM 365 Web API通信。 Dynamics CRM已配置为ADFS上的Relying Party。
服务器是Windows Server 2016,一切都在本地运行,而不是在Azure上。
我采取的步骤获取有效令牌如下:
1)在ADFS中转到“应用程序组”,添加一个新的服务器应用程序,获取ClientID并为我的Web应用程序生成客户端密码。
2)在Active Directory中添加新用户webAppUser
3)将此用户作为CRM中的应用程序用户添加,使用先前在ADFS上注册我的Web应用程序时获得的ClientID作为应用程序ID。还创建了一个具有对实体帐户的完全权限的新角色,并将此角色分配给此应用程序用户
4)我使用以下代码检索承载令牌并将其添加到我的HttpClient授权标头中。
public class CrmWebApiClient
{
private HttpClient _httpClient;
public CrmWebApiClient()
{
_httpClient = new HttpClient();
_httpClient.BaseAddress = new Uri("https://crmbaseaddress.com");
}
internal async Task Initialize()
{
try
{
var authority = "https://adfsServerUrl/adfs/";
var authContext = new AuthenticationContext(authority,false);
var credentials = new ClientCredential(clientID,clientSecret);
var authResult = await authContext.AcquireTokenAsync("https://crmbaseaddress.com", credentials);
_httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
}
catch (Exception ex)
{
var error = ex;
}
}
internal async Task<string> GetValuesAsync()
{
var result = string.Empty;
try
{
result = await _httpClient.GetStringAsync("api/data/v8.1/accounts");
}
catch (Exception ex)
{
var error = ex;
}
return result;
}
}
5) 我设法获得了一个令牌,但是当我调用CRM的Web Api时,仍然收到401未经授权的错误消息。