Pubnub-CodeNameOne库 - 缺少方法(Access Manager)

时间:2016-10-09 16:50:47

标签: ssl https codenameone pubnub

我在我的社交应用程序项目中使用了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仪表板中的Access Manager功能(我遵循了Pubnub教程{{ 3}})。

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

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

不幸的是,当我通过Pubnub订阅/发布时,我仍然收到错误:

  

[错误112-0]:身份验证失败。验证密钥不正确:   { “消息”: “禁止”, “有效载荷”:{ “通道”:[ “myChannelID”]} “错误”:真, “服务”:“访问   管理器”, “状态”:403}

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

您对我如何解决这个问题有所了解吗?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

PubNub Access Manager& SSL / TLS

虽然您应该使用Access Manager to secure your channels on a per device/user basis,但是不需要Access Manager就可以使用PubNub over TLS(SSL是已弃用/易受攻击的前身,并且这些术语通常可以互换使用)。

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

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

但是如果您在密钥集(发布/订阅键)上启用Access Manager,则需要为auth-keys上的频道授予权限(读取,写入和管理)。每个最终用户都应该拥有一个唯一的身份验证密钥,该密钥具有该用户发布,订阅,获取历史记录,状态等所需的渠道的权限。

您使用发布,订阅和密钥初始化PubNub的grant permissions from your secure server(执行grant API需要密钥)。使用v4 PubNub SDK,服务器在使用密钥进行访问时具有超级管理员权限。 v3 SDK要求服务器授予自己对自己的身份验证密钥的访问权限,但由于Codename One适用于移动客户端应用程序,因此您无需等待适用于Codename One的v4 PubNub SDK。我假设您将在服务器上使用Java并使用v4 Java SDK v4 has the super admin permissions feature when initialized with the secret key注意:文档需要更新,因为他们仍然声明即使使用密钥进行初始化也需要auth-key。

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