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