Yodlee REST api addSiteAccount1 异常 IncompleteArgumentException
Yodlee REST api addSiteAccount1 exception IncompleteArgumentException
我有为 cobUser、用户、siteId、用户名、密码添加 SiteAccount1 的代码。
此代码在开发环境中为我正确添加了站点帐户,即我得到了有效响应并可以继续(注意这是针对 DAG Bank 的)。
但是在暂存环境中,addSiteAccount returns 我是个例外(注意这是针对 siteId 15798)。
异常类型:com.yodlee.core.IncompleteArgumentException
参考代码:_xxxxxxx
消息:'FieldInfo:FieldInfoSingle 的解密失败:
Yodlee 已实施 PKI 以进一步增强当前的安全措施。您的暂存环境似乎启用了 PKI 功能。启用此功能后,Yodlee 希望您以加密形式发送凭据。这意味着在调用 addSiteAccount1 API 和其他 APIs 如 putMFARequest 和 updateCredentials 之前,您需要加密 username/password 和 MFA 信息的值,然后发送它而不是像您一样将其作为明文发送现在正在做。或者您可以要求 Yodlee 支持团队在您的临时环境中禁用 PKI 功能。
要为您的环境获取 public 密钥,您可以调用 getPublicKeyDetails API
子- URL: jsonsdk/DataEncryptionService/getPublicKeyDetails
您必须将 cobSessionToken 作为参数传递,这是一个 HTTP POST 调用。
EDIT-1(在 Java 中添加了用于加密值的代码)
下面是Java中关于如何加密的代码,仅供参考:-
public static String encrypt(String plainText) throws Exception
{
Security.addProvider(new BouncyCastleProvider());
String pub = "-----BEGIN PUBLIC KEY-----"+
"\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUS7ZJpnbcu8B+mfGrr0Gz6A23lS893mEFNnuR+frbtWDsoIHTfN4yhfbslkzsAMp3ENvM6Ic/0nHEvftrZxFXSrN7n3xZ+mdzOV/u8rqZoB7MEu6mZvdg3zfj7dGglq/fqlYxzHLlxDHjeCrY0dSD0ZAX1zCm3IZ0ufbMBqTrsSaHAuDlIXaQlJXmz3/Y+YfynJZXth/ats1gTBQhMIU9lWutMa4iKkeehn+P9ja4pC9NUlB9W4pojF2Qs+pY4kgTb9+SP8WjnhoSAmJMQGbYwY3HOZyfuOqAmdjoh9Y0LEZ3tq5NGD0b+T7L+P/FuIzvjYZYq6g/FaWaPcVrVLpwIDAQAB"+
"\n-----END PUBLIC KEY-----";
System.out.println(pub);
String strt= pub;
StringReader fileReader= new StringReader(strt);
PEMReader pemReader= new PEMReader(fileReader);
PublicKey pk= (PublicKey)pemReader.readObject();
Cipher c = Cipher.getInstance(RSA_ECB_PKCS5);
PublicKey publicKey = pk;
c.init(Cipher.ENCRYPT_MODE, transformKey(publicKey,
"RSA", new BouncyCastleProvider()));
byte[] encValue= new byte[0];
try {
encValue = c.doFinal(plainText.getBytes());
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
String encrypted = DatatypeConverter.printHexBinary(encValue);
System.out.println("Encrypted value: "+encrypted);
return encrypted;
}
我有为 cobUser、用户、siteId、用户名、密码添加 SiteAccount1 的代码。
此代码在开发环境中为我正确添加了站点帐户,即我得到了有效响应并可以继续(注意这是针对 DAG Bank 的)。
但是在暂存环境中,addSiteAccount returns 我是个例外(注意这是针对 siteId 15798)。
异常类型:com.yodlee.core.IncompleteArgumentException 参考代码:_xxxxxxx 消息:'FieldInfo:FieldInfoSingle 的解密失败:
Yodlee 已实施 PKI 以进一步增强当前的安全措施。您的暂存环境似乎启用了 PKI 功能。启用此功能后,Yodlee 希望您以加密形式发送凭据。这意味着在调用 addSiteAccount1 API 和其他 APIs 如 putMFARequest 和 updateCredentials 之前,您需要加密 username/password 和 MFA 信息的值,然后发送它而不是像您一样将其作为明文发送现在正在做。或者您可以要求 Yodlee 支持团队在您的临时环境中禁用 PKI 功能。
要为您的环境获取 public 密钥,您可以调用 getPublicKeyDetails API 子- URL: jsonsdk/DataEncryptionService/getPublicKeyDetails
您必须将 cobSessionToken 作为参数传递,这是一个 HTTP POST 调用。
EDIT-1(在 Java 中添加了用于加密值的代码) 下面是Java中关于如何加密的代码,仅供参考:-
public static String encrypt(String plainText) throws Exception
{
Security.addProvider(new BouncyCastleProvider());
String pub = "-----BEGIN PUBLIC KEY-----"+
"\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUS7ZJpnbcu8B+mfGrr0Gz6A23lS893mEFNnuR+frbtWDsoIHTfN4yhfbslkzsAMp3ENvM6Ic/0nHEvftrZxFXSrN7n3xZ+mdzOV/u8rqZoB7MEu6mZvdg3zfj7dGglq/fqlYxzHLlxDHjeCrY0dSD0ZAX1zCm3IZ0ufbMBqTrsSaHAuDlIXaQlJXmz3/Y+YfynJZXth/ats1gTBQhMIU9lWutMa4iKkeehn+P9ja4pC9NUlB9W4pojF2Qs+pY4kgTb9+SP8WjnhoSAmJMQGbYwY3HOZyfuOqAmdjoh9Y0LEZ3tq5NGD0b+T7L+P/FuIzvjYZYq6g/FaWaPcVrVLpwIDAQAB"+
"\n-----END PUBLIC KEY-----";
System.out.println(pub);
String strt= pub;
StringReader fileReader= new StringReader(strt);
PEMReader pemReader= new PEMReader(fileReader);
PublicKey pk= (PublicKey)pemReader.readObject();
Cipher c = Cipher.getInstance(RSA_ECB_PKCS5);
PublicKey publicKey = pk;
c.init(Cipher.ENCRYPT_MODE, transformKey(publicKey,
"RSA", new BouncyCastleProvider()));
byte[] encValue= new byte[0];
try {
encValue = c.doFinal(plainText.getBytes());
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
String encrypted = DatatypeConverter.printHexBinary(encValue);
System.out.println("Encrypted value: "+encrypted);
return encrypted;
}