3

pubnub でチケットを開き、以下も読みました: https://help.pubnub.com/entries/22251291-Can-I-Hide-my-Application-Keys-

しかし、難読化した後でもキーがクライアント側にあるため、キーがユーザーに表示されないようにする方法をまだ理解できません。

私がやりたいことは、この投稿で読んだことです: PubNub は、2 つのプライベート チャンネル間のメッセージを公開します。

  1. 各ユーザーのパブリック チャネルとプライベート チャネルを作成する
  2. ユーザーからキーを隠す

ユーザーが見ることができないカスタム キーを使用してプライベート チャネルを作成する方法がわかりません。


編集: auth_key の流れを理解することはできましたが、許可を付与するための JS 暗号 lib の php 同等物を見つけることができません。PHPでそれを実装する方法について何か考えはありますか?

4

2 に答える 2

6

クライアントに送信され、JavaScript でアクセス可能なキーを非表示にすることはできません。

auth_keyただし、パブリッシュ キーとサブスクライブ キーと共に を使用して、チャネルの読み取りと書き込みができるユーザーを制限することができます。PubNub は最近、これを可能にするPubNub Access Managerをリリースしました。はauth_key各ユーザーに固有です。

  1. ユーザーauth_keyは、そのユーザーが自分のプライベート チャネルを読み書きできるようにします。他の誰もこのチャネルに読み書きできないように、パーミッションを設定する必要があります。
  2. ユーザーauth_keyは、自分のパブリック チャネルへの読み取りと書き込みのアクセス許可をユーザーに付与します。他のユーザーはこのチャネルを読み取ることはできますが、書き込むことはできません。

これを行う正確な方法の詳細は、おそらく別の質問で尋ねられるべきです。PAM 入門ガイドは、開始するのに最適な場所です。

于 2014-01-12T10:44:56.087 に答える
5

PubNub JS SDK で API キーを隠す

PubNub Access Manager を使用して最新のドキュメントを確認してください - https://www.pubnub.com/docs/security/access-control

PubNub Access Managerを使用すると、JavaScript やその他の言語のソース コードでpublish_keyandを隠すことを心配する必要がなくなります。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 フル ライブラリ

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、ユーザーにアクセス権を付与します。 あなたはあなたが望むものを作ることができます!gZW5jb2RlZCBmaWxreadwrite5ttlauthkey

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

于 2014-01-17T02:34:41.060 に答える