我一直卡在这里,找不到可靠的解决方案。
我在服务器端使用 PHP,在客户端使用 Vanilla JS。
在服务器端,我正在为当前登录用户的频道生成一个授权令牌(https://www.pubnub.com/docs/general/basics/manage-access),使他能够阅读他的频道通过以下代码发送消息:
当密钥超时时,我也会生成一个新的,所以这一代一切正常。
但我的问题是从这里开始:
我像这样将密钥传递给客户端:
用户正在访问该频道。但问题是,我正在将此授权密钥传递给客户端。哪个人获得了该用户的授权令牌;可以设置自己的客户端并可以读取发送给该用户的消息。
我该如何处理?
还有一个:
我正在用 PHP 像这样发布到一个频道。但是我可以在不设置授权令牌的情况下做到这一点。我确定身份验证令牌系统正在运行,因为当我将错误的身份验证密钥传递给客户端时,它会显示 403 禁止。但是,我可以在没有授权密钥的情况下发布到频道。这是因为它是服务器端吗?
谢谢!
用谷歌搜索一切...
这个授权策略和JWT是一样的。某人将如何获得此身份验证令牌?如果您正在使用与服务器的安全连接(TSL,又名 https),并且您的 PHP 服务器是安全的,那么这就是您所能做的。这是互联网:)
现在最终用户的机器有多安全?他们是否容易受到网络钓鱼或其他可能允许黑客访问他们机器的计划的影响?人类是最容易被黑客攻击的东西,你真的无法做任何事情来保护他们;)
就 PubNub 的安全性而言,您所做的正是大型公司 10 多年来一直在使用 PubNub 所做的事情。问题是您的服务器有多安全,黑客无法访问您的代码和数据并获取您的 PubNub 密钥。在我在 PubNub 的 9 年多时间里,我从来不知道会发生这种情况。
您授予了太多权限,但它没有任何负面影响。
read
- subscribe
(接收消息),fetch
(来自历史的消息),以及一些存在的东西(get/set state
,here now
)write
- publish
(发送消息)get
和 set
- 这仅适用于 PubNub 对象,它不同于 pub/sub.同样,授予对您授予的资源没有影响但会增加身份验证令牌大小(在本例中只是一点点)的权限不会造成任何伤害。
当您执行
setToken
时,您将在用于调用 PubNub 操作的 pubnub
对象上进行设置。 PubNUb SDK 自动将授权令牌添加为请求中的查询参数。所以它会自动为您传递。
打开浏览器控制台,选择 Network 选项卡,然后查看任何 PubNub 请求/url。您将看到查询参数名称
auth
,值是您的身份验证令牌。
秘密密钥使您的服务器能够授予权限(生成授权令牌)并且它使您的服务器能够访问您的 PubNub 密钥集中的所有内容。不要让那个秘密密钥被泄露。
我希望您在不使用只有订阅密钥的令牌的情况下测试您的客户端。即使我为频道制作令牌,客户端也可以在没有令牌的情况下读写