服务器端的 pubnub 访问管理器

PubNub Access Manager(PAM) 允许开发人员在整个 PubNub 实时网络中创建和实施对通道的安全访问,从而扩展了 PubNub 现有的安全框架。

Access Manager 允许你管理实时应用程序和数据流的细化权限,创建多个权限级别,授予和撤消访问权限以及审核用户访问权限。

要使用 Access Manager,你需要在管理仪表板中启用 Access Manager。启用 Access Manager 后,必须先授予权限,然后才能发送或接收任何数据。

PAM Server side Configuration

为了使客户端正常工作,在服务器端必须首先为给定的 PAM 通道或通道组和身份验证令牌组合发出适当的权限。

要授予这些权限,你必须至少使用你的订阅密钥和密钥初始化 pubnub 实例。

示例:

步骤 1.制作 Pubnub 配置: -

PNConfiguration pnConfiguration = new PNConfiguration();
        pnConfiguration.setSubscribeKey(SUBSCRIBE_KEY);
        pnConfiguration.setPublishKey(PUBLISH_KEY);;
        pnConfiguration.setSecretKey(SECRET_KEY);
        pnConfiguration.setSecure(true);
        pnConfiguration.setLogVerbosity(PNLogVerbosity.BODY);

步骤 2.使用 pnConfiguration 初始化 PubNub

PubNub pubnub = new PubNub(pnConfiguration);

PAM 操作发生在三个级别

1. A global level (no auth key, and no channel/channel group is defined) 

2. A channel/channel group level (only a channel/channel group is defined) 

3. A channel/channel group and key level (where both the channel/channel     group and key are defined)

在所有这些级别,我们可以授予,撤销和审核权限。这里我们在频道/频道组和授权密钥级别上执行相同的操作。

PAM  Grant

我们可以在特定通道或通道组上授予 auth_key 读/写权限

例:

同步:

try {

    pubnub.grant().authKeys(Arrays.asList("auth1,auth2"))
    .channels(Arrays.asList("channel1,channel2")).read(true).write(true    ).ttl(0).sync();

} catch (PubNubException e) {
    e.printStackTrace();
}

异步:

pubNub.grant()。channels(channels).authKeys(Arrays.asList(authKey))。read(true).write(true).manage(false).ttl(0).async(new PNCallback(){

@Override
public void onResponse(PNAccessManagerGrantResult result,
     PNStatus status) {
}});

PAM REVOKE:我们可以撤销特定频道或频道组对 auth_key 的许可。

撤消权限的语法与授予相同。我们需要将权限 true 更改为 false。

try {

    pubnub.grant().authKeys(Arrays.asList("auth1,auth2"))
    .channels(Arrays.asList("channel1,channel2")).read(false).write( false    ).ttl(0).sync();

} catch (PubNubException e) {
    e.printStackTrace();
}

PAM Audit:我们可以审核特定频道/频道组的给定权限或特定频道或频道组上的给定 auth_key

例:

pubnub.audit().channel("mycha").authKeys(Arrays.asList("a1")).async(new PNCallback<PNAccessManagerAuditResult>(){

    @Override
    public void onResponse(PNAccessManagerAuditResult result,
            PNStatus status) {
                
            }
    });   

PAM Add Channels into groups:我们还可以将频道添加到频道组中

例:

pubnub.addChannelsToChannelGroup().channelGroup("my_channel").channels(Arrays.asList("my_channel5"))
    .async(new PNCallback<PNChannelGroupsAddChannelResult>() {

            @Override
            public void onResponse(PNChannelGroupsAddChannelResult                                                                                                                                             result,PNStatus status) {
                
                
            }
});

Authentication Isue at Client Side (403 Forbidden):

如果执行 PAM 操作时出错,你可能会收到 403 错误。如果这样做,请确保已设置正确的 secret_key,并且发布计算机的时钟与 NTP 同步。

NTP  Setup

网络时间协议(NTP)是一种用于在计算机网络中同步计算机时钟时间的协议。NTP 使用协调世界时(UTC)将计算机时钟时间同步到毫秒,有时甚至是几分之一毫秒。

这里我们需要使用 pubnub scyn 服务器时间。按照这样做的步骤

步骤 1 Intallation NTP

$ sudo apt-get update
$ sudo apt-get install ntp

步骤 2 编辑 ntp.conf

Replace these four with pubnub server 

server 0.ubuntu.pool.ntp.org 
server 1.ubuntu.pool.ntp.org 
server 2.ubuntu.pool.ntp.org 
server 3.ubuntu.pool.ntp.org

server 0.pubsub.pubnub.com
server 1.pubsub.pubnub.com
server 2.pubsub.pubnub.com
server 3.pubsub.pubnub.com

步骤 3 重启 NTP 服务

$ sudo service ntp restart

参考:

[ https://www.pubnub.com/docs/web-javascript/pam-security][1]

https://www.pubnub.com/docs/java/pubnub-java-sdk-v4