前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pusher 如何利用私有频道实现安全实时消息通信

Pusher 如何利用私有频道实现安全实时消息通信

作者头像
Tinywan
发布2024-01-10 15:15:00
1520
发布2024-01-10 15:15:00
举报
文章被收录于专栏:开源技术小栈

介绍

当需要以某种方式限制对频道的访问时,应使用私有频道。为了让用户订阅私人频道权限,必须获得授权。当使用 private- 通道名称调用 subscribe 方法时,通过对可配置身份验证 url 的 HTTP 请求进行身份验证。

安全通信架构图

授权步骤:为了使用Pusher的私有频道进行安全消息通信,需要进行以下步骤:

  1. 实例化pusher:需要在客户端创建pusher实例。这需要提供Pusher的key以及其他相关配置参数。
  2. 连接WebSocket:通过pusher的连接方法,建立与服务器之间的WebSocket连接。
  3. 唯一客户端pusher:connection_established(socket_id)每个socket_id是唯一的
  4. 订阅私有频道:在建立连接后,需要使用pusher的subscribe方法订阅私有频道。订阅时,需要提供频道的名称以及认证信息。
  5. 进行身份授权:为了订阅私有频道,用户必须获得授权。可以通过自动接口进行身份授权,请求参数包括频道名称和socket_id。身份授权接口签名可以通过JSON形式进行验证。
  6. 配置身份验证URL:在客户端,需要配置身份验证的URL地址,该地址用于向服务器发送认证请求。身份授权授权接口签名:JSON:{"auth":"key:signatrue"}
  7. 触发客户端pusher频道回调:在订阅频道后,可以触发pusher的频道回调,以处理接收到的消息。

身份验证

1. 安装依赖包

代码语言:javascript
复制
composer require pusher/pusher-php-server

2. 授权接口伪代码

代码语言:javascript
复制
public function pusherAuth(Request $request)
{
    $param = $request->post();
    if (!isset($param['channel_name']) || !isset($param['socket_id'])) {
        return 403;
    }
    $options = array(
        'cluster' => 'ap3',
        'useTLS' => true
    );
    $pusher = new Pusher(
        '108365f54d1d934e76781',
        '9cfbfd3b06290c427de62',
        '13394324',
        $options
    );

    $presenceData = array('name' => 'Tinywan');
    return $pusher->presenceAuth($param['channel_name'], $param['socket_id'], '1', $presenceData);
}

3. 身份验证接口地址

代码语言:javascript
复制
http://127.0.0.1:8787/test/pusher-auth

演示代码

1. 客户端代码 private_channel_client.html

代码语言:javascript
复制
<!DOCTYPE html>
<head>
    <title>Private channels</title>
    <script src="https://js.pusher.com/7.0/pusher.min.js"></script>
    <script>
        // (1) 创建实例
        const pusher = new Pusher('108365f54d1d934e76781', {
            cluster: 'ap3',
            authEndpoint: 'http://127.0.0.1:8787/test/pusher-auth',
            // auth: { headers: { "X-CSRF-Token": "SOME_CSRF_TOKEN" } },
        });

        // (2) 订阅频道
        var uid = 1;
        var privateChannel = pusher.subscribe('private-user-' + uid);

        // (3) 绑定事件
        privateChannel.bind('private-event', function(data) {
            alert(JSON.stringify(data));
        });
    </script>
</head>
<body>
<h1>Private channels Test</h1>
</body>

2. 服务端代码 private_channel_server.php

代码语言:javascript
复制
<?php
/**
 * @desc pusher server
 * @author Tinywan(ShaoBo Wan)
 */
require_once '../../vendor/autoload.php';

$options = array(
    'cluster' => 'ap3',
    'useTLS' => true
);
$pusher = new Pusher\Pusher(
    '108365f54d1d934e76718',
    '9cfbfd3b06290c427d1e6',
    '13394341',
    $options
);

$data['message'] = 'Hi Tinywan private 2022';
$pusher->trigger('private-user-1', 'private-event', $data);

3. 服务端推送消息

4. 客户端接收消消息

授权响应

接收消息

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 安全通信架构图
  • 身份验证
  • 演示代码
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档