伺服器端的 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