我正在使用密码授予类型在IFD上整合与Dynamics CRM的内部部署(v8.1 / 8.2)的api集成。
我正在成功检索访问令牌,但是当我尝试调用端点时(例如/api/data/v8.2/contacts?$select=fullname,contactid)我得到401 - 访问被拒绝错误。当我使用用户登录CRM时,我可以成功查看此数据,并在所有测试的端点上发生错误。
有趣的是,今天早上我意识到检索到的令牌不能被base64解码 - 这是正确的吗?
我可以使用一些想法来解决问题。我采取的步骤:
很明显,我在Azure或CRM中存在配置问题。然而,我找不到任何指南或问题,建议查看我尚未检查的问题,我可以使用那些不得不在模糊设置中进行调整的人的一些输入等。
继承我的令牌请求:
var options = {
method: 'POST',
url: 'https://login.microsoftonline.com/<snip>/oauth2/token', //for 'intercity technology' (guid is unique)
headers:
{
'cache-control': 'no-cache',
'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
formData:
{
grant_type: 'password',
client_id: ‘<snip>’, //aplication id
client_secret: ‘<snip>’, //any key in the keys list
username: ‘<snip>’,
password: ‘<snip>’, // and their password
resource: ‘<snip>’ //application id
}
};
logger.debug(util.inspect(options));
request(options, function (error, response, body) {
...
继续我当前的api请求测试:
var options = {
method: 'GET',
url: organisation_url + '/api/data/v8.2/contacts?$select=fullname,contactid',
headers: {
Authorization: 'Bearer '+token,
Accept: 'application/json',
'OData-MaxVersion':4.0,
'OData-Version': 4.0,
'Content-Type': 'application/json; charset=utf-8',
'Prefer': 'odata.maxpagesize=500',
'Prefer': 'odata.include-annotations=OData.Community.Display.V1.FormattedValue'
}
};
logger.debug(util.inspect(options));
request(options, function (error, response, body) {
...
答案 0 :(得分:0)
您需要使用授权类型'client_credentials'而不是'password',因为后者不受支持。 类似的东西:
grant_type: 'client_credentials',
client_id: ‘<snip>’, //aplication id
client_secret: ‘<snip>’, //any key in the keys list
resource: ‘<snip>’ //CRM Url
按照指南here和所有链接确保正确注册AAD应用程序并且CRM应用程序用户已就位。