0

Braintree API 向业务对象返回各种内部 ID,包括SubscriptionPlanPaymentMethod等的 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();
}

获取到的上述tokengetToken然后用于检查支付方式的存在,并用于移除、列出和更新支付方式。

在内部,在应用程序中,此令牌也可用于识别付款方式。

回顾:与用户共享此令牌是否存在任何安全问题?

4

3 回答 3

1

Braintree 标识符和令牌对用户不感兴趣或不相关。没有理由分享它们。卡片的最后 4 个是您需要展示的所有内容,以供日后参考。

于 2020-09-05T19:00:07.677 回答
1

我认为与用户共享大脑树标识符没有任何意义。

如果您想为这些付款或地址提供一些功能,那么这些应该通过您的 api。

理想情况下,您不应该将 Braintree 域模型直接暴露给用户(这是几乎所有第三方域模型的标准做法)。您可以在 Braintree 域模型之上创建自己的域模型。您的所有 api 都将围绕您的域模型展开,该模型将代理 Braintree 域模型。

于 2020-09-10T16:11:05.367 回答
1

如果一定要用,那也没关系。这里可以使用中间件来保证安全。

于 2020-09-14T03:51:55.127 回答