Woommerce API代币访问级别



我有一个关于Wooccommerce rest-API和用户访问级别的一般问题。

我们开始开发基于Woocomerce-API的客户android应用程序,并使用Woocomerce令牌(读/写(。

但问题是,代币可以访问Wooccommerce的全部信息/数据(所有客户订单、产品…(,如果用户反编译APK并找到代币,那么他/她就可以访问网站的全部数据。

所以,问题是如何根据令牌中的用户角色来限制API的访问级别。

例如,客户级别的token只能看到她自己的订单、产品。。。以及Wooccommerce客户角色上定义的任何访问权限。

您可以构建一个带有自定义API端点的WP插件,该端点/插件将使用USER的凭据接收来自远程APK的API调用。

通过这种方式,读/写令牌保留在您的平台上,不会在任何APK 中暴露

当您从远程端接收到特定操作时,您在内部使用令牌来限制将返回给该特定用户的内容,并检查他自己的登录凭据(再次在内部(。

这(在某种意义上(实现起来更复杂,但比向APK添加令牌安全得多。

就在一个多月前,我们公司也遇到了同样的问题。经过大量搜索,我们在某个地方发现了(找不到链接ATM(一位wooccommerce工作人员说它是开发出来的,而且是这样的。

你不可能仅仅为了某件事而拥有代币,要么你全部拿走,要么你没有代币。令人讨厌的是,他们建议你开始包装他们所有的api端点,并根据需要保护它们。如果你问我的话,这只是浪费时间,虽然你确实从Woocommerce获得了有效/安全/测试的代码,但你只会浪费时间来完成一切,导致他们在更新端点策略时出错。

在我们的案例中,由于我们只需要一些东西,我们决定使用我们的安全逻辑而不是wc-auth来创建一个全新的端点。

另一个糟糕的事情是,只有当用户实际上有一个Wordpress帐户时,你才能获得该令牌,并且你可以打开请求用户访问+快速确认的模式(比如当你将第三方应用程序与FB/Google连接时(

在我们的情况下,移动应用程序需要获得一些WC数据,而用户需要有一个帐户,这对于当前的WCRest API来说似乎是不可能的任务。

全面披露,多年未接触WordPress。我在这里谈论的是API。

我想你会想要建立一个访问控制列表和你自己的中间层API来完成这项工作。我认为中间层可能是WordPress自己的API。

来自WooCommerce文档:

此端点专门用于用户生成API密钥,并促进WooCommerce REST API与应用程序之间的集成。绝不会将此端点用作客户的登录方法。

基本上,我建议使用代理层,在该层中,您可以使用所需的WooCommerce数据交换安全用户API令牌,以验证用户是否可以在您的服务器上提出请求。

值得一提的是,这并不一定很激烈:只需创建一个接受WooCommerce请求的端点,检查用户是否与客户匹配,然后用正确的令牌将WooCommCommerce请求发送给WooComm商务。返回响应,可选地清除,并返回数据(或数据的子集(。

从好的方面来看,如果你决定将这些数据放在WooCommerce生态系统之外的其他地方,这个中间层可能会派上用场。

为什么不为每个用户生成一个新的API密钥?

WooCommerece文档指出,您可以为使用/wc-auth/v1/authorize端点的每个用户生成一个API密钥。

来自文件:

任何应用程序都可以使用此端点,以允许用户为您的应用程序生成API密钥。这使得与WooCommerce API的集成更加容易,因为用户只需要通过URL授予对您的应用程序的访问权限。重定向回您的应用程序后,API密钥将在单独的POST请求中发送回。

下面是一个如何构建身份验证URL的python示例:

from urllib.parse import urlencode
store_url = 'http://example.com'
endpoint = '/wc-auth/v1/authorize'   # Here is the endpoint I mentioned!
params = {
"app_name": "My App Name",
"scope": "read_write",
"user_id": 123,
"return_url": "http://app.com/return-page",
"callback_url": "https://app.com/callback-endpoint"
}
query_string = urlencode(params)
print("%s%s?%s" % (store_url, endpoint, query_string))

这是一个使用API密钥发布的JSON示例

{
"key_id": 1,
"user_id": 123,
"consumer_key": "ck_xxxxxxxxxxxxxxxx",
"consumer_secret": "cs_xxxxxxxxxxxxxxxx",
"key_permissions": "read_write"
}

最新更新