Azure 服务器到服务器身份验证和与Microsoft Dynamics 365 CRM的API通信

Azure 服务器到服务器身份验证和与Microsoft Dynamics 365 CRM的API通信,azure,dynamics-crm-2011,dynamics-crm,microsoft-dynamics,Azure,Dynamics Crm 2011,Dynamics Crm,Microsoft Dynamics,我有一个使用非交互式登录从我的Nodejs客户端调用CRM API的用例。为此,我在Azure Active Directory上注册我的应用程序后生成了一个客户端密钥和密码。我成功地生成了访问令牌,但每当我尝试访问数据(通过Microsoft OData客户端或直接Web API HTTP请求)时,我总是会收到401,尽管我的访问令牌包含在授权标头中。这是我的Nodejs客户端: var-adal=require('adal-node'); var azure=require('azure')

我有一个使用非交互式登录从我的Nodejs客户端调用CRM API的用例。为此,我在Azure Active Directory上注册我的应用程序后生成了一个客户端密钥和密码。我成功地生成了访问令牌,但每当我尝试访问数据(通过Microsoft OData客户端或直接Web API HTTP请求)时,我总是会收到401,尽管我的访问令牌包含在授权标头中。这是我的Nodejs客户端:

var-adal=require('adal-node');
var azure=require('azure');
var express=需要(“express”);
var https=require('https');
var-app=express();
var AuthenticationContext=adal.AuthenticationContext;
var authorityHostUrl='0https://login.microsoftonline.com';
var租户='xxxx.onmicrosoft.com';
var authorityUrl=authorityHostUrl+'/'+租户;
var clientId='xxxx';
var clientSecret='xxxx'
var资源管理器https://xxxx.crm.dynamics.com';
var context=新的AuthenticationContext(authorityUrl);
var-accessToken;
风险值凭证;
acquireTokenWithClientCredentials(资源、clientId、clientSecret、函数(错误、令牌响应){
如果(错误){
log('不起作用的井:'+err.stack);
}否则{
console.log(“=============================================================================================================”);
accessToken=tokenResponse.accessToken;
日志(accessToken);
}
});
app.get('/accounts',函数(req,res){
var token=“承载人”+accessToken;
console.log(令牌);
变量选项={
主机:“xxxx.crm.dynamics.com”,
路径:'/api/data/v8.2/accounts?$select=name,address1\u city&$top=10',
标题:{
“授权”:令牌,
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json;字符集=utf-8”,
“OData MaxVersion”:“4.0”,
“OData版本”:“4.0”
}
};
回调=函数(响应){
log(“调用回调”);
var-str='';
//已收到另一个数据块,请将其附加到'str'中`
响应.on('data',函数(块){
str+=chunk;
log(“数据==>”+str);
});
//整个回复都收到了,所以我们就在这里打印出来
response.on('end',function(){
log(“完整数据==>”+str);
console.log(str);
});
}
console.log(选项);
请求(选项,回调).end();
});
app.listen(3000);

您是否在AAD应用程序中配置了对CRM的委派权限?您正在使用的用户是否在CRM中具有指定的安全角色?@FedericoJousset我可以通过交互式登录使用同一用户访问API。只有编程访问出现“拒绝访问”错误。此外,我还为“Dynamics CRM Online”和“Windows Azure Active Directory”配置了删除权限。谢谢。我是说代表的许可。