Мне нужно получить доступ к 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)
Я успешно интегрировался с веб-интерфейсом 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
Других решений пока нет …