PubNub JS SDK で API キーを隠す
PubNub Access Manager を使用して最新のドキュメントを確認してください - https://www.pubnub.com/docs/security/access-control
PubNub Access Managerを使用すると、JavaScript やその他の言語のソース コードでpublish_key
andを隠すことを心配する必要がなくなります。subscribe_key
通常、キーを非表示にすることは、PubNub チャンネルのデータ ストリームへのアクセスを防ぐ手段になると考えるでしょう。ただし、これは必須ではなく、代わりに使用するベスト プラクティスの方法があります。以下は、アクセスを管理する新しい方法とキーを管理する新しい方法のソリューションです。
PubNub Access Manager の例 JS/PHP Grant Revoke SDK
PubNub グローバル リアルタイム ネットワーク上で、ユーザーごとの接続grant()
とアクセスをリアルタイムで発行できます。revoke()
許可/取り消し (ホワイトリスト) パーミッション スキームを使用した PubNub ネットワーク内のさまざまなレベルのセキュリティ。階層内で最初に見つかった許可が読み取り/書き込みアクセスを許可します。この階層に基づいて、パブリッシュとサブスクライブの両方の権限が評価されます。PubNubpam.php
アクセス マネージャー PHP クラスの準備が整いました。SDK の完全なコード カバレッジを含む以下の使用例コードを確認することから始めることができます。GitHub Gist リンクからすべてのソース コードを見つけることができます。
PubNub Access Manager (PAM) アクセスを許可および取り消すための PHP フル ライブラリ

PAM を組み込み、クラス アクセスを初期化する
require('pam.php');
$manager = new access(
"pub-c-e132b7b4-0c2c-4d36-a828-1de1ea50d167",
"sub-c-f95db694-6ff9-11e3-9291-02ee2ddab7fe",
"sec-c-OWFkNWQ1NDctN2JiNy00NzJmLTk3Y2ItN2ExODZlYzkyNzY0"
);
ユーザー アクセスの許可
と分のアクセス権を使用してauthkey
、ユーザーにアクセス権を付与します。 あなたはあなたが望むものを作ることができます!gZW5jb2RlZCBmaWx
read
write
5
ttl
authkey
print_r($manager->grant(
"my_channel", // CHANNEL
"gZW5jb2RlZCBmaWx", // STRING (AUTH KEY)
true, // READ
true, // WRITE
5 // TTL in MINUTES
));
ユーザーへのプレゼンス アクセスの許可
プレゼンス チャネルへのアクセスも許可します (PubNub Dev Console に必要)。
print_r($manager->grant(
"my_channel-pnpres", // CHANNEL
"gZW5jb2RlZCBmaWx", // STRING (AUTH KEY)
true, // READ
true, // WRITE
5 // TTL in MINUTES
));
GLOBAL アクセスを許可する (すべてのユーザーに)
を除外するauthkey
と、すべてにアクセス権をグローバルに付与できます。
print_r($manager->grant_global(
"my_channel", // CHANNEL
true, // READ
true, // WRITE
5 // TTL in MINUTES
));
アクセスを永久に許可
ttl
パラメータを に設定することで、永久にアクセスを許可できます0
。
print_r($manager->grant_global(
"my_channel", // CHANNEL
true, // READ
true, // WRITE
0 // FOREVER GRANT!!!
));
ユーザーアクセスを取り消す
ユーザーへのアクセスを即座に取り消します。
print_r($manager->revoke(
"some-other-channel", // CHANNEL
"gZW5jb2RlZCBmaWx" // STRING (AUTH KEY)
));
グローバル アクセスを取り消す
authkey
パラメータを除外することで、グローバル アクセスを取り消すこともできます。
print_r($manager->revoke(
"some-other-channel" // CHANNEL
));
PAM (PubNub Access Manager) PHP クラス SDKpam.php
完全なファイルは次の場所にあります: PubNub Access Manager (PAM) PHP Full Library for Granting and Revoking Access
<?php
class access {
function __construct( $pubkey, $subkey, $seckey ) {
$this->publish_key = $pubkey;
$this->subscribe_key = $subkey;
$this->secret_key = $seckey;
}
function grant_global( $channel, $read=True, $write=True, $ttl=5 ) {
/** Grant GLOBAL Access on a Channel. **/
return $this->_auth(array(
"channel" => $channel,
"r" => $read ? 1 : 0,
"w" => $write ? 1 : 0,
"ttl" => $ttl
));
}
function grant( $channel, $authkey=False, $read=True, $write=True, $ttl=5 ) {
/** Grant Access on a Channel. **/
return $this->_auth(array(
"channel" => $channel,
"auth" => $authkey,
"r" => $read ? 1 : 0,
"w" => $write ? 1 : 0,
"ttl" => $ttl
));
}
function revoke( $channel, $authkey=False, $read=False, $write=False, $ttl=1 ) {
/** Revoke Access on a Channel.**/
return $this->_auth(array(
"channel" => $channel,
"auth" => $authkey,
"r" => $read ? 1 : 0,
"w" => $write ? 1 : 0,
"ttl" => $ttl
));
}
function _sign($message) {
/** Calculate a signature by secret key and message. **/
return strtr( base64_encode(hash_hmac(
'sha256',
utf8_encode($message),
utf8_encode($this->secret_key),
true
)), '+/', '-_' );
}
function _auth($query) {
/** Issue an authenticated request.**/
if (!array_key_exists( 'timestamp', $query )) {
$query['timestamp'] = time();
}
## Global Grant?
if ((array_key_exists('auth',$query)) && !$query['auth']) {
unset($query['auth']);
}
## Construct String to Sign
$params = array();
$sorted_keys = array_keys($query);
sort($sorted_keys);
foreach ($sorted_keys as $key) array_push(
$params,
$key . "=" . $query[$key]
);
$string_to_sign =
$this->subscribe_key . "\n" .
$this->publish_key . "\n" .
"grant" . "\n" .
implode( "&", $params );
$signature = $this->_sign($string_to_sign);
$url = (
"https://pubsub.pubnub.com/v1/auth/grant/sub-key/" .
$this->subscribe_key . "?" .
implode( "&", $params ) .
"&signature=" . $signature
);
$workspace_curl = curl_init();
curl_setopt( $workspace_curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $workspace_curl, CURLOPT_URL, $url );
$result = curl_exec($workspace_curl);
return $workspace_details =json_decode( $result, true );
}
}
?>
pam.php
: PubNub Access Manager (PAM) アクセスを許可および取り消すための PHP フル ライブラリ
PubNub 開発コンソールのテスト リンク:
警告: PubNub 開発コンソールでは、プレゼンス チャネルにも許可が必要です。-pnpres
チャンネル名 のサフィックスに付与することで、プレゼンス アクセスを設定できます。
http://www.pubnub.com/console/?channel=my_channel&sub=sub-c-f95db694-6ff9-11e3-9291-02ee2ddab7fe&pub=pub-c-e132b7b4-0c2c-4d36-a828-1de1ea50d167&sec=sec-c-OWFkNWQ1NDctN2JiYYNy00Nz2Nz0NzJmLT