我有一个特定的用例,需要将用户的帐户余额发送到他们的浏览器和/或移动设备。这些余额当然是私人的,但当余额发生变化时,我需要向每个连接的用户发送余额更新,然而,我担心一次推出1000个私人频道。
对于这种用例,Pusher和PubNub之间有什么限制吗?
编辑:我特别关注https://pusher.com/docs/server_api_guide/interact_rest_api#example-在多个频道/lang=cs上发布一个事件,并同时发布到多个频道。我能在一批中发布到100000个私人频道吗?
PubNub发布限制和实时账户余额通知的安全性
每个频道每秒发布次数没有硬性限制。PubNub保留更改此限制的权利。请联系support@pubnub.com
以确认您的限额。
安全发布实时帐户余额
因此,您需要安全地向许多人发送实时帐户余额信息。当你想传输一个人的实时账户余额时,你需要一份安全考虑清单。由于您从受信任的代码执行环境传输实时帐户余额,因此不需要实现PKI(公钥基础设施)安全性。但是,您确实需要会话令牌安全授权、用户身份验证和双层加密。
-
会话令牌安全:PubNub Access Manager将提供允许基于会话的用户级访问管理的机制。
-
用户身份验证:您需要通过电子邮件/密码对用户进行身份验证。成功验证后,您将使用
grant()
API颁发会话令牌,以便与PubNub Access Manager一起使用。您还将生成一个将在项目3中使用的安全字符串(随机长不可预测密钥)。 -
双层加密:除了TLS,您还将使用PubNub AES256消息加密。您将在SDK初始化时提供
cipher_key
。在上面的2项中,除了令牌会话密钥之外,您还需要生成密码密钥
会话令牌密钥(Auth Key)和密码密钥的好例子:
cHRiSEZPVkdnd1RqTktNVnB0YkdWS1UxSlRVbXNVMUpyV201U05XUlhSak
注意:
uuid
(用户的id)应被视为密码密钥和会话令牌,以防长时间和不可预测。
接收实时更新的用户初始化示例
现在,您可以使用以下JavaScript示例安全地连接到PubNub。
<!-- User Initialization Example -->
<script src="https://cdn.pubnub.com/pubnub-3.7.17.min.js"></script>
<script>(function(){
// Init User Connection
var pubnub = PUBNUB({
, subscribe_key : 'sub-c-your-subscribe-key-here'
, auth_key : 'user-session-token-here'
, cipher_key : 'user-cipher-key-here'
, uuid : 'user-id-here'
, ssl : true
});
// Subscribe to a Private User Channel
pubnub.subscribe({
channel : 'user-private-channel-here'
, message : function(message) { console.log(message) }
});
})()</script>
发送实时更新的服务器初始化示例
现在,对于可信执行环境中的服务器代码,您可以向最终用户客户端发布消息。
// Server Initialization Example
var pubnub = PUBNUB({
publish_key : 'pub-c-your-publish-key-here'
, subscribe_key : 'sub-c-your-subscribe-key-here'
, secret_key : 'sec-c-your-secret-key-here'
, auth_key : 'server-admin-session-token-here'
, cipher_key : 'destination-user-cipher-key-here'
, uuid : 'server-id-here'
, ssl : true
});
// Send Realtime Balance when User's Balance Changes
pubnub.publish({
channel : 'destination-user-private-channel-here'
, message : { "balance" : 10.00 }
});
注意:用户必须预先授予对用户
auth_key
的访问权限,然后才能在客户端设备上订阅其用户频道。服务器必须使用grant
API进行授权。
// Send Realtime Balance when User's Balance Changes
pubnub.grant({
channel : 'destination-user-private-channel-here'
, auth_key : 'user-session-token-here'
, ttl : 1440 // minutes of session time to live
, read : true // user can read-only
, write : false // user can't write
});
遵循上述指导原则将使您能够为向最终用户交付敏感信息提供现代安全性。请注意,我们没有涵盖从不受信任的代码执行环境发布时所需的PKI公钥基础设施。但是,根据您的需要,您将不需要PKI,因为您是从服务器的可信代码发布的。