【问题标题】:Which Braintree business object IDs could be made available to end users最终用户可以使用哪些 Braintree 业务对象 ID
【发布时间】:2020-12-24 13:09:42
【问题描述】:

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();
}

getToken获取的上述token,随后用于检查支付方式是否存在,并用于删除、列出和更新支付方式。

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

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

【问题讨论】:

    标签: java scala security braintree braintree-vault


    【解决方案1】:

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

    【讨论】:

    • 当然,但是当用户希望删除付款方式或地址时,用户将如何告诉您要删除哪个付款方式或地址?换句话说,你的标识符是什么?但我认为我们有一个误解:“与用户共享令牌”是指与客户端运行的程序(例如 Angular 应用程序)共享它,而不是与人类本身共享。
    • 好吧,当您指的是“客户端”时,您说的是“最终用户”
    • 嗯,是的,我很抱歉,我应该更正一下。你对此有什么想法吗?
    • 应该没问题,据我了解,它们是加密的哈希值,只能用于对 Braintree 的授权 API 调用(从您的服务器)
    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的想法!域模型不直接共享。只有标识符。由于 API 只能使用标识符来操作 Braintree 对象,因此 API 必须使用两个标识符(以防不鼓励共享 Braintree ID)。然后,API 必须为付款方式的客户端提供不同的 ID,然后将其与 Braintree ID 匹配。听起来像是双重预订。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2012-08-09
      • 2018-04-22
      • 1970-01-01
      相关资源
      最近更新 更多