【发布时间】:2020-12-24 13:09:42
【问题描述】:
Braintree API 向业务对象返回各种内部 ID,包括 Subscription、Plan、PaymentMethod 等 ID。与最终用户的应用程序(在用户设备上运行的前端代码)共享这些 ID 是否存在任何安全问题? (最终用户不会看到这些 ID,但它们会通过网络传输。)
详细示例:
用户向应用程序添加付款方式。 App服务器将请求转发给Braintree,例如:
val result = gateway.paymentMethod.create(
new PaymentMethodRequest()
.customerId(user.billing.get.braintree.customerID)
.paymentMethodNonce(nonce)
.billingAddressId(user.billing.get.braintree.addressID.get)
.options()
.makeDefault(true)
.verifyCard(true)
.failOnDuplicatePaymentMethod(false)
.done()
)
然后对结果进行如下处理:
Option(result.getTarget)
.map {
case card: CreditCard =>
braintreePaymentMethod(
card.getClass.getCanonicalName,
card.getToken,
card.getImageUrl,
card.isDefault,
"ending " + card.getLast4
)
}
.getOrElse(throw Payments.Exception.Braintree(result.getMessage))
card.getToken 在接口中返回支付方式的令牌:
public interface PaymentMethod {
String getToken();
boolean isDefault();
String getImageUrl();
String getCustomerId();
List<Subscription> getSubscriptions();
}
getToken获取的上述token,随后用于检查支付方式是否存在,并用于删除、列出和更新支付方式。
在应用程序内部,此令牌也可用于识别付款方式。
回顾:与用户共享此令牌是否存在任何安全问题?
【问题讨论】:
标签: java scala security braintree braintree-vault