我们正在构建一个使用Yodlee数据的聚合应用程序,虽然我们合作的大多数机构如果使用MultiFactor身份验证都有安全问题,但有一个机构(JP Morgan)有一个“MULTI_LEVEL”MFA方法。在尝试测试和处理这个问题时,我们使用了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>
=======================================================
我们运行这些测试的soap服务器是: https://eval.yodlee.com/yodsoap/services
所以,2个真正的问题:
1)此错误类型的来源是什么(InvalidSiteAccountExceptionFault)?我可以从this page看到它意味着“会员网站帐户标识符不存在,不属于该用户,或者是自定义项目。”,但该语言对我来说并不清楚(可能是“会员网站”)帐户标识符“是yodlee的应用程序词汇表,对外部开发人员没有意义吗?”
2)是否有一个好的文档资源专门涵盖了与具有MULTI_LEVEL MFA的机构进行交互的正确流程?
答案 0 :(得分:1)
1)此错误类型的来源是什么(InvalidSiteAccountExceptionFault)?我可以从这个页面看到它意味着“会员网站帐户标识符不存在,不属于该用户,或者是自定义项目。”,但我不清楚该语言(可能是“会员网站帐户标识符”) yodlee的应用程序词汇表对外部开发人员没有意义吗?)
回答 -
Yodlee拥有根据银行账户,信用卡账户,贷款账户,投资账户等不同类型的银行产品设计的数据模型。在Yodlee的术语中,所有这些不同的产品都被称为容器。每个站点都启用了多个容器,并为每个容器分配了内容服务ID(CSID)。 Yodlee后面的层次结构就像
网站(网站ID)
| ----&gt;容器1(储蓄/检查(CSID 1))
| ----&gt;容器2(信用卡(CSID 2))
Now there are two ways of linking an account with Yodlee.
1)基于容器的添加 - 在此链接特定于一个容器的帐户,因此数据仅适用于该特定产品。
2)基于站点的添加 - 在此您将帐户链接到具有与之关联的不同容器的站点,因此可以使用与所有容器关联的数据。
实施例。 - 我们有Chase网站,里面有储蓄/支票账户,卡账户等。 现在,如果您使用内容服务ID(CSID)进行基于容器的添加和链接Chase信用卡,您将只看到信用卡详细信息,并且不会获取您的保存/检查帐户详细信息。 如果您执行基于站点的添加,则将根据最终站点上的可用性链接与该站点关联的所有容器。因此,如果您同时拥有与您的登录相关联的保存/支票帐户和信用卡帐户,则两者都将被提取。
每当链接一个帐户时,就会创建一个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问题,然后使用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基本流程也将处理多级别。