YodleeSOAPAPI中用于多级MFA的XML交换是什么样子的,为什么会出现以下错误?

YodleeSOAPAPI中用于多级MFA的XML交换是什么样子的,为什么会出现以下错误?,yodlee,Yodlee,我们正在构建一个使用Yodlee数据的聚合应用程序,虽然我们与之合作的大多数机构在使用多因素身份验证时都存在安全问题,但有一家机构(摩根大通)采用了“多级”MFA方法。在尝试测试和处理这一点时,我们使用了Java示例应用程序“Aggregation12”(这是迄今为止我们用作所有其他YodleeSOAP交互的实现示例) 当尝试使用控制台应用程序“yconsole.sh”与任何多级MFA机构交谈时(摩根大通退休选项[cobrand ID 4999]是真实选项,而[cobrand ID 15682]

我们正在构建一个使用Yodlee数据的聚合应用程序,虽然我们与之合作的大多数机构在使用多因素身份验证时都存在安全问题,但有一家机构(摩根大通)采用了“多级”MFA方法。在尝试测试和处理这一点时,我们使用了Java示例应用程序“Aggregation12”(这是迄今为止我们用作所有其他YodleeSOAP交互的实现示例)

当尝试使用控制台应用程序“yconsole.sh”与任何多级MFA机构交谈时(摩根大通退休选项[cobrand ID 4999]是真实选项,而[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>
=======================================================
=======================================================
=已用时间:538毫秒
=在消息中:10008392-1USen2

因此,有两个真正的问题:

1) 此错误类型(InvalidSiteAccountExceptionFault)的来源是什么?我可以从中看出,这意味着“成员站点帐户标识符不存在,不属于此用户,或者是一个自定义项”。但我不清楚这种语言(可能“成员站点帐户标识符”是yodlee的应用程序词汇表,对外部开发人员来说没有意义?)

2) 是否有一个好的文档资源专门涵盖了与具有多级MFA的机构进行交互的正确流程?

1)此错误类型(InvalidSiteAccountExceptionFault)的来源是什么?我可以从这个页面上看到它的意思是“成员站点帐户标识符不存在,不属于这个用户,或者是一个自定义项”。但我不清楚这种语言(可能“成员站点帐户标识符”是yodlee的应用词汇表,对外部开发人员来说没有意义?

答复——

Yodlee根据银行账户、信用卡账户、贷款账户、投资账户等不同类型的银行产品设计了数据模型。在约德利的术语中,所有这些不同的产品都被称为容器。每个站点都启用了多个容器,并为每个容器分配了内容服务id(CSID)。Yodlee后面的层次结构如下

站点(站点ID)
|---->容器1(储蓄/支票(CSID 1))
|---->货柜2(信用卡(CSID 2))

1) 基于容器的添加-在这种情况下,您将特定于一个容器的帐户链接起来,因此数据将仅可用于该特定产品

2) 基于站点的添加-在此过程中,您将帐户链接到一个站点,该站点具有与之关联的不同容器,因此与所有容器关联的数据都可用

例如,我们有Chase网站,该网站有储蓄/支票账户、信用卡账户等。 现在,如果您使用内容服务id(CSID)进行基于容器的添加并链接Chase信用卡,您将只看到信用卡详细信息,而不会抓取您的储蓄/支票帐户详细信息。 如果执行基于站点的添加,则与该站点关联的所有容器都将基于最终站点上的可用性进行链接。因此,如果您的登录名同时具有储蓄/支票帐户和信用卡帐户,则两者都将被提取

无论何时链接帐户,都会创建一个ItemId作为该帐户的唯一标识符。如果完成基于站点的添加,则将创建siteAccountId,然后在siteAccountId下创建ItemId。对于基于站点的聚合,任何API调用的主键都是siteAccountId;对于基于容器的添加,主键都是ItemId

您正在进行基于容器的添加,然后尝试使用站点聚合API(putMFARequestForSite),因此您会遇到异常

因此,对于MFA流,在进行基于容器的添加时使用-

获取MFA问题的getMFAResponse(),然后使用putMFARequest API()将答案发回Yodlee

2)是否有一个好的文档资源专门涵盖与具有多级MFA的机构进行互动的适当流程?

答复——

任何MFA的基本流程都是

1) 调用getMFAResponse API以获取MFA问题/令牌/图像

2) 调用putMFARequest API将答案发布回Yodlee

3) 再次转到#1检查是否有更多问题/令牌/图像可用。继续执行这3个步骤,直到getMFAResponse中的错误代码有一个值

如果值为0(零),则MFA流成功,否则出现错误

修改答案以添加示例putMFAResponse请求XML

<?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>
xxxxxxxxxxxx-1使用2

您可以使用itemManagement菜单链接基于容器的帐户,并使用它检查添加帐户的流程。上述MFA的基本流程也将处理多级。

感谢您的反馈!让我再深入一点:您链接到的文档资源是用于REST的,但是我们在这个应用程序存在之前就开始工作了,我们仍然在使用SOAP,我认为这也是基于站点的添加存在之前的情况。这场斗争已经得到了soap xml的例子。我们尝试使用yodconsole(示例java应用程序)并记录要从中构建的xml交互;这很好,但在这种情况下不成功。有没有一种方法可以让我们看到示例xml,用于发布到“putMFARequest”端点以获得令牌MFA响应?为了澄清,yodconsole示例java应用程序无法工作的原因是,它产生了我们在该交换中的问题1中指出的错误,显然是因为它不知道如何分离容器和站点添加?您是否有一个示例应用程序
<?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>