我有一个需要与 Dynamics CRM 365 Web API 对话的 Web 应用程序。Dynamics CRM 配置为 ADFS 上的依赖方。服务器是 Windows Server 2016,一切都在本地而不是在 Azure 上。
我为获取有效令牌所做的工作如下:
1) 在 ADFS 中,转到应用程序组并添加一个新的服务器应用程序,获取 ClientID 并为我的 Web 应用程序生成一个客户端密码。
2) 在 Active Directory 中添加新用户 webAppUser
3) 将此用户添加为CRM中的应用程序用户,其应用程序 ID 是我之前将我的 Web 应用程序注册到 ADFS 时获得的 ClientID。还创建了一个对实体帐户具有完全权限的新角色,并将此角色分配给此应用程序用户
4) 我正在使用下面的代码来检索不记名令牌并将其添加到我的 HttpClient Authorization 标头中。
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 Unauthorized。