Как выглядит обмен XML для многоуровневого MFA в API Yodlee SOAP и почему мы получаем следующую ошибку?
Мы создаем приложение агрегации, работающее с данными Yodlee, и, хотя у большинства учреждений, с которыми мы работаем, есть вопросы безопасности, если они используют многофакторную аутентификацию, существует одно учреждение (JP Morgan), которое использует подход MFA "MULTI_LEVEL". В попытке протестировать и обработать это, мы использовали пример приложения Java "Aggregation12" (который мы использовали в качестве примера реализации для всех других взаимодействий Yodlee SOAP до сих пор).
При попытке использовать консольное приложение "yconsole.sh" поговорите с любым учреждением MULTI_LEVEL MFA (варианты выхода на пенсию JP Morgan [cobrand ID 4999] - это реальное, DagMultilevel [cobrand ID 15682] - тестовый), начальный шаг входа в систему работает хорошо, но мы не можем пройти первый шаг токена в многоуровневой аутентификации без сообщения об ошибке. XML из наших журналов доступа выглядит так:
=======================================================
= Elapsed: 538 milliseconds
= In message: <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><putMFARequestForSite xmlns="http://refresh.refresh.core.soap.yodlee.com"><userContext xmlns=""><cobrandId>10008392</cobrandId><channelId>-1</channelId><locale><country>US</country><language>en</language><variant></variant></locale><tncVersion>2</tncVersion><applicationId>7A318B9CD555B6A3FF82D22CBF3C9F00</applicationId><cobrandConversationCredentials xsi:type="ns1:SessionCredentials" xmlns:ns1="http://login.ext.soap.yodlee.com"><sessionToken>10122012_0:87e50a0bac49909f03763e2819c5c3f7da170f0c0b6b8e74efc594875089b25efeb4142bbe5b42d73f5682d33c44c8a33718c15d53d5f4afda68c8d389e15f39</sessionToken></cobrandConversationCredentials><preferenceInfo><currencyCode>USD</currencyCode><timeZone>PST</timeZone><dateFormat>MM/dd/yyyy</dateFormat><currencyNotationType>SYMBOL_NOTATION</currencyNotationType><numberFormat><decimalSeparator>.</decimalSeparator><groupingSeparator>,</groupingSeparator><groupPattern>###,https://www.pivotaltracker.com/epic/show/0.##</groupPattern></numberFormat></preferenceInfo><fetchAllLocaleData>false</fetchAllLocaleData><conversationCredentials xsi:type="ns2:SessionCredentials" xmlns:ns2="http://login.ext.soap.yodlee.com"><sessionToken>10122012_0:794aeae009e6ae1d6b7f89be3a133b74c7618ec794917b9ca41b83e903d847ab7a318260120729e5851b1bdc956711d37549d29e941dd1e25fb628d70e5b70d5</sessionToken></conversationCredentials><valid>true</valid><isPasswordExpired>false</isPasswordExpired></userContext><userResponse xsi:type="ns3:MFATokenResponse" xmlns="" xmlns:ns3="http://mfarefresh.core.soap.yodlee.com"><token xsi:type="xsd:string">5731234567</token></userResponse><memSiteAccId xmlns="">14616812</memSiteAccId></putMFARequestForSite></soapenv:Body></soapenv:Envelope>
= Out message: <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>InvalidSiteAccountExceptionFaultMessage</faultstring><detail><ns4:InvalidSiteAccountExceptionFault xmlns:ns4="http://core.soap.yodlee.com"><faultText>com.yodlee.core.InvalidSiteAccountException: Argument value not found: 14616812</faultText></ns4:InvalidSiteAccountExceptionFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
=======================================================
Мыльный сервер, с которым мы запускаем эти тесты: https://eval.yodlee.com/yodsoap/services
Итак, 2 реальных вопроса:
1) каково происхождение этого типа ошибки (InvalidSiteAccountExceptionFault)? На этой странице я вижу, что это означает "Идентификатор учетной записи сайта участника не существует, не принадлежит этому пользователю или является пользовательским элементом", но этот язык мне не понятен (возможно, "идентификатор учетной записи сайта участника" такое словарь приложения для yodlee, который не имеет смысла для внешнего разработчика?)
2) Есть ли хороший документальный ресурс, который конкретно описывает надлежащий процесс взаимодействия с учреждением с MULTI_LEVEL MFA?
1 ответ
1) каково происхождение этого типа ошибки (InvalidSiteAccountExceptionFault)? На этой странице я вижу, что это означает "Идентификатор учетной записи сайта участника не существует, не принадлежит этому пользователю или является пользовательским элементом", но этот язык мне не понятен (возможно, "идентификатор учетной записи сайта участника" такое словарь приложения для yodlee, который не имеет смысла для внешнего разработчика?)
Ответ -
Yodlee имеет модель данных, разработанную для различных типов банковских продуктов, таких как банковские счета, счета кредитных карт, ссудные счета, инвестиционные счета и так далее. В терминологии Йодли все эти разные продукты называются контейнерами. На каждом сайте включено несколько контейнеров, и для каждого контейнера назначается идентификатор службы контента (CSID). Иерархия, которой следует Йодли, похожа на
Сайт (идентификатор сайта)
| ----> контейнер 1(сохранение / проверка (CSID 1))
| ----> контейнер 2(кредитная карта (CSID 2))
Now there are two ways of linking an account with Yodlee.
1) Добавление на основе контейнера - при этом вы связываете учетную запись, относящуюся к одному контейнеру, и, следовательно, данные будут доступны только для этого конкретного продукта.
2) Добавление на основе сайта - при этом вы связываете учетную запись с сайтом, с которым связаны различные контейнеры, и, следовательно, доступны данные, связанные со всеми контейнерами.
Ex. - У нас есть сайт Chase, на котором есть сберегательный / текущий счет, карточный счет и т. Д. Теперь, если вы сделаете добавление на основе контейнера и свяжете кредитную карту Chase с помощью идентификатора службы контента (CSID), вы увидите только данные кредитной карты и ваши сохранения / проверки. данные аккаунта не будут получены. Если вы выполните добавление на основе сайта, все контейнеры, связанные с этим сайтом, будут связаны в зависимости от доступности на конечном сайте. Следовательно, если у вас есть как учетная запись для сохранения / проверки, так и учетная запись кредитной карты, связанная с вашим логином, то оба будут извлечены.
Всякий раз, когда учетная запись связана, ItemId создается как уникальный идентификатор для этой учетной записи. Если добавление на основе сайта выполнено, то будет создан siteAccountId, а затем под siteAccountId будут созданы ItemIds. Для агрегации на основе сайта первичным ключом является siteAccountId для любого вызова API, а для добавления на основе контейнера первичным ключом является ItemId.
Вы делаете дополнение на основе контейнера, а затем пытаетесь использовать API агрегации сайта (putMFARequestForSite), и, следовательно, вы получаете исключение.
Следовательно для потока MFA при выполнении добавления на основе контейнера -
getMFAResponse ( https://developer.yodlee.com/Indy_FinApp/Aggregation_Services_Guide/REST_API_Reference/getMFAResponse) для получения вопросов MFA, а затем используйте API-интерфейс putMFARequest ( https://developer.yodlee.com/Indy_Fque_F_F_Reader_Reader_Amp_Amp_App_Amp_App_App_A_ист_Приключения_пользователя) отправив ответы обратно Йодли.
2) Есть ли хороший документальный ресурс, который конкретно описывает надлежащий процесс взаимодействия с учреждением с MULTI_LEVEL MFA?
Ответ -
Основной поток любого МФА
1) вызовите getMFAResponse API, чтобы получить вопрос / токен / изображение MFA
2) Вызовите API putMFARequest, чтобы опубликовать ответ на Yodlee.
3) Снова перейдите к #1, чтобы проверить, доступны ли еще вопросы / токены / изображения. продолжайте эти 3 шага, пока код ошибки в getMFAResponse не получит значение.
Если значение равно 0(ноль), то поток MFA прошел успешно, иначе произошла ошибка.
Изменение ответа для добавления образца XML-запроса putMFAResponse
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body> <putMFARequest xmlns="http://refresh.refresh.core.soap.yodlee.com"><userContext xmlns=""><cobrandId>xxxxxxxxxxxxx</cobrandId><channelId>-1</channelId><locale> <country>US</country><language>en</language><variant /></locale> <tncVersion>2</tncVersion><applicationId>xxxxxxxxxxxxxxxxxx</applicationId> <cobrandConversationCredentials xmlns:ns1="http://login.ext.soap.yodlee.com" xsi:type="ns1:SessionCredentials"> <sessionToken>10122012_0:xxxxxxxxxxxxxxxxxxxxxxxxxxxx</sessionToken> </cobrandConversationCredentials><preferenceInfo><currencyCode>USD</currencyCode><timeZone>PST</timeZone><dateFormat>MM/dd/yyyy</dateFormat> <currencyNotationType>SYMBOL_NOTATION</currencyNotationType><numberFormat> <decimalSeparator>.</decimalSeparator><groupingSeparator>,</groupingSeparator> <groupPattern>###,##0.##</groupPattern></numberFormat></preferenceInfo> <fetchAllLocaleData>false</fetchAllLocaleData><conversationCredentials xmlns:ns2="http://login.ext.soap.yodlee.com" xsi:type="ns2:SessionCredentials"<sessionToken>10122012_0:xxxxxxxxxxxxxxxxxxxxx</sessionToken></conversationCredentials><valid>true</valid><isPasswordExpired>false</isPasswordExpired></userContext><userResponse xmlns="" xmlns:ns3="http://mfarefresh.core.soap.yodlee.com" xsi:type="ns3:MFATokenResponse"><token xsi:type="xsd:string">123456</token></userResponse><itemId xmlns="">14672972</itemId></putMFARequest></soapenv:Body></soapenv:Envelope>
Кроме того, вы можете получить образец JAVA-приложения из https://developer.yodlee.com/Indy_FinApp/Sample_Apps/JAVA_Sample Вы можете использовать меню itemManagement для связывания учетных записей на основе контейнера и использовать его для проверки потока добавления учетной записи. Основной поток MFA выше будет обрабатывать многоуровневые.