我有一個需要與Dynamic CRM 365 Web API交流的Web應用程序。動態CRM在ADFS上被配置爲依賴方。 服務器是Windows Server 2016,所有內容都是在內部部署,而不是在Azure上。將WebApp授權給ADFS以訪問Dynamics CRM Web API
我做什麼,以獲得有效的標記有以下幾種:
1)在ADFS去應用程序組,並添加新的服務器應用程序,採取了客戶端ID,也爲我的Web應用程序客戶端機密。
2)在Active Directory中添加新的新用戶webAppUser
3)在CRM添加該用戶爲應用用戶與應用程序ID,當我註冊了我的網絡我剛纔得到了客戶端ID應用程序到ADFS。還創建了一個新的角色,具有完全權限的實體帳戶,並將此角色分配給此應用程序用戶
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 Unauthorized。
你能幫我嗎?我在正確的道路上嗎?我應該做更多的事嗎?
什麼版本的ADFS的這是什麼?是否支持密碼授權..顯然有,但你能否澄清一點。 – davidcarr
@davidcarr這是Windows Server 2016與最新的ADFS –
@RickyStam我有類似的情況,你能澄清你的意思是系統用戶嗎?並非所有用戶都是用戶創建的? –