WooCommerce REST API客户身份验证

时间:2017-07-25 04:15:49

标签: wordpress woocommerce hook-woocommerce wordpress-rest-api woocommerce-rest-api

到处都有很多关于此的问题,但没有一个问题得到解答。 WooCommerce没有通过用户名和密码支持基于客户的身份验证。

我们可以创建API密钥来访问woo commerce上的数据,但不限制每个用户。一旦您访问了API,所有客户都可以访问。信息变得可访问。 (不相关,但我也使用nativescript,所以如果代码被反编译,因为它的javascript文件,所有消费者的秘密等都是可访问的。所以我不能使用它。)

有人试图让WooCommerce接受他的拉动请求,但显然它被拒绝了。他创建了一个端点,用用户名和密码验证客户。

链接在这里:https://github.com/woocommerce/woocommerce/pull/6133/commits/a4fe8267402358369a4805b1622ed09b49015b20

我的问题是,如果我在访问API时使用HTTPS,这有多安全?

是否可以利用DDOS攻击来查找密码等? 我是否应该添加一些额外的代码,例如sleep(1000)(可能不是最聪明的方法),以使身份验证更慢,因此密码不能通过迭代来破解。

对客户仅对其数据进行身份验证的最佳,安全且简便的方法是什么?

代码如下:

/**
 * Login a customer
 *
 * @since 2.2
 * @param array $data
 * @return array
 */
public function login_customer( $data ) {

    // Checks the username.
    if ( ! isset( $data['username'] ) ) {
        return new WP_Error( 'woocommerce_api_missing_customer_username', sprintf( __( 'Missing parameter %s', 'woocommerce' ), 'username' ), array( 'status' => 400 ) );
    }

    // Checks the password.
    if ( ! isset( $data['password'] ) ) {
        return new WP_Error( 'woocommerce_api_missing_customer_password', sprintf( __( 'Missing parameter %s', 'woocommerce' ), 'password' ), array( 'status' => 400 ) );
    }

    // Attempts to login customer
    $credentials = array();
    $credentials['user_login'] = $data['username'];
    $credentials['user_password'] = $data['password'];
    $credentials['remember'] = true;
    $user = wp_signon( $credentials, false );

    // Checks for an error in the customer login.
    if ( is_wp_error( $user) ) {
        return new WP_Error( 'woocommerce_api_cannot_login_customer', $user->get_error_message(), array( 'status' => 400 ) );
    }

    do_action( 'woocommerce_api_login_customer', $user );

    $this->server->send_status( 201 );

    return $this->get_customer( $user->ID );
}

0 个答案:

没有答案