0

我们正在构建一个使用 Yodlee 数据的聚合应用程序,虽然与我们合作的大多数机构在使用 MultiFactor Authentication 时都会遇到安全问题,但有一个机构(JP Morgan)采用“MULTI_LEVEL”MFA 方法。在尝试测试和处理这个问题时,我们使用了 Java 示例应用程序“Aggregation12”(到目前为止,我们使用它作为所有其他 Yodlee SOAP 交互的实现示例。

当尝试使用控制台应用程序“yconsole.sh”与任何 MULTI_LEVEL MFA 机构交谈时(JP Morgan Retirement options [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

所以,两个真正的问题:

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

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

4

1 回答 1

1

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

回答 -

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

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

Now there are two ways of linking an account with Yodlee.

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

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

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

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

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

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

getMFAResponse ( https://developer.yodlee.com/Indy_FinApp/Aggregation_Services_Guide/REST_API_Reference/getMFAResponse ) 用于获取 MFA 问题,然后使用 putMFARequest API( https://developer.yodlee.com/Indy_FinApp/Aggregation_Services_Guide/REST_API_Reference/putMFARequest )将答案发回给 Yodlee。

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

回答 -

任何 MFA 的基本流程是

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

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

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

如果值为 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>

您也可以从https://developer.yodlee.com/Indy_FinApp/Sample_Apps/JAVA_Sample获取 JAVA sampleApp 您可以使用 itemManagement 菜单链接基于容器的帐户并使用它来检查添加帐户的流程。基本流程上面的 MFA 也将处理多级。

于 2014-03-06T08:11:15.460 回答