Pubnub-CodeNameOne 库 - 缺少方法(访问管理器)

Pubnub-CodeNameOne library - missing methods (Access Manager)

我在我的社交应用程序项目中使用 Pubnub 库 (Pubnub-CodeNameOne-3.7.8.cn1lib)(其中包括我通过您的精彩教程实现的实时聊天:https://www.codenameone.com/blog/building-a-chat-app-with-codename-one-part-5.html)。

但由于 Apple 将不再接受来自应用程序的 http URL 连接,我不得不加强我的应用程序的安全性,因此我决定使用 HTTPS 并激活 Pubnub 仪表板中的访问管理器功能(我按照 Pubnub 教程 https://www.pubnub.com/docs/codenameone-java/pam-security#understanding_access_manager_permissions_hierarchy).

所以我在我的 CN1 项目中更改了 Pubnub 的实例化,例如:

pb = new Pubnub(PUBNUB_PUB_KEY, PUBNUB_SUB_KEY, SECRET_KEY, true);//enable SSL
pb.setAuthKey(USER_UIID);

不幸的是,当我 subscribe/publish 通过 Pubnub 时我仍然遇到错误:

[Error 112-0] : Authentication Failure. Incorrect Authentication Key : {"message":"Forbidden","payload":{"channels":["myChannelID"]},"error":true,"service":"Access Manager","status":403}

因此,我想执行管理 PAM 功能,例如授予或撤销,以解决上述错误消息问题。 但是我没有找到 Pubnub 教程中提到的 pubnub.pamGrant() 或 pubnub.pamRevoke() 方法。所以我仍然停留在这个错误上。

你知道我该如何解决这个问题吗?非常感谢您的帮助。

PubNub 访问管理器 & SSL/TLS

虽然您应该使用 Access Manager to secure your channels on a per device/user basis,但通过 TLS 使用 PubNub 不需要访问管理器(SSL 是 deprecated/vulnerable 的前身,这些术语通常可以互换使用)。

因此您的初始化代码在调用 PubNub 操作时启用 TLS(https 连接)是正确的。

pb = new Pubnub(PUBNUB_PUB_KEY, PUBNUB_SUB_KEY, SECRET_KEY, true);

但是,如果您在密钥集(pub/sub 密钥)上启用访问管理器,则您需要为授权密钥上的频道授予权限(读、写和管理)。每个最终用户都应该有一个唯一的授权密钥,该密钥具有该用户发布、订阅、获取历史记录、在线状态等所需的频道权限。

grant permissions from your secure server which you initialize PubNub with the publish, subscribe and secret keys (secret key is required to execute the grant API). With v4 PubNub SDKs, the server has super admin permissions when it inits with the secret key. v3 SDKs require the server to grant itself access to its own auth-key but since Codename One is for mobile client apps, you don't need to wait for a v4 PubNub SDK for Codename One. And I would assume you would be using Java on your server and our v4 Java SDK v4 has the super admin permissions feature when initialized with the secret key注意:文档需要更新,因为他们仍然声明即使使用密钥初始化也需要授权密钥。

所以我的建议是,像您已经为服务器和客户端所做的那样启用 SSL (TLS),但在短期内禁用 Access Manager。一旦您的基本功能正常运行,请将 Access Manager 和 auth-keys 的使用集成到您的服务器和客户端中。