Доступ к Microsoft Dynamics CRM 2016 REST WEB API

Мне нужно получить доступ к CRM odata REST API для интеграции. У меня есть php cron для синхронизации данных из CRM. Когда я достиг конечной точки веб-API CRM https://internal.crm.org.com:5443/appname/api/data/v8.0/ из браузера я перенаправляю на следующую ссылку:
https://adfs.crm.org.com/adfs/ls/?wa=wsignin1.0&wtrealm = HTTPS: //internal.crm.org.com: 5443 /&wctx = гт = 1&ID = 4d65271b-682e-44bb-80ce-ed44b5370ed7&RU =% 2forgTechnicalTraining% 2fdefault.aspx&ДАП = 2016-11-02T07: 15: 47Z&wauth = урна: федерация: Authentication: окна
и окно показано для аутентификации, используя имя пользователя и пароль.

Итак, мой вопрос, как пройти аутентификацию на сервере ресурсов?
Microsoft указывает мне на эту страницу
https://msdn.microsoft.com/library/mt622431.aspx?cs-save-lang=1&CS-Ланг = CSharp # код-сниппет-1
и этот парень объясняет, как аутентифицироваться с помощью oauth2
http://www.powerobjects.com/2016/01/22/start-your-engines-getting-started-with-the-crm-2016-web-api/#collapse2

Microsoft заявила, что Dynamics 365 использует три разные модели безопасности (утверждения, активный каталог и аутентификации auth2)

1

Решение

Я успешно интегрировался с веб-интерфейсом CRM 2016 с использованием протокола ws-trust.

Эта библиотека они делают тяжелую работу за вас и внедряют сообщения протокола ws-trust.
Шаги Для проверки подлинности с помощью CRM, который защищен ADFS 3.0
1. Получите тот же самый токен безопасности (конечная точка для ws-trust для активной аутентификации должна быть настроена на сервере adfs)
2. Включите этот токен для каждого http-запроса в заголовке в качестве маркера earer.
Код:

<?php

include_once dirname(dirname(__FILE__)) . '/http.php';
include_once dirname(dirname(__FILE__)) . '/wstrust.php';

// username/password of a user in the LDAP directory
// LDAP as configured in the PingFederate Username Token WS-Trust connection settings for Salesforce
$username = 'username';
$password = 'password';

// RST appliesTo
$appliesTo = 'crmservice/api/data/v8.0/';

//STS service
$IPSTS = 'org/adfs/services/trust/13/UsernameMixed';

// special token type (needs to be enabled in run.properties)
$tokenType = WSTRUST::TOKENTYPE_SAML20;

// call to IP-STS, authenticate with uname/pwd, retrieve RSTR with generated token
//get security token
$result = HTTP::doSOAP(
$IPSTS,
WSTRUST::getRSTHeader(
WSTRUST::getUserNameToken($username, $password),
WSTRUST::getTimestampHeader(), $IPSTS),
WSTRUST::getRST($tokenType, $appliesTo)
);

// parse the RSTR that is returned
list($dom, $xpath, $token, $proofKey) = WSTRUST::parseRSTR($result);

$xpath->registerNamespace('saml', 'urn:oasis:names:tc:SAML:2.0:assertion');
$token =  $xpath->query('saml:EncryptedAssertion', $token);
$token = $token->item(0);

// now pass the encrypted assertion to the RP
$ts = WSTRUST::getTimestampHeader('_0');
$token = $dom->saveXML($token);

//include the token with the http header per request  like this Authorization: Bearer $token
2

Другие решения

Других решений пока нет …