当前位置: 首页 > 知识库问答 >
问题:

laravel-echo-server-客户端无法进行身份验证,已获得HTTP状态403 JWT授权

柯立果
2023-03-14

我正在建一个水疗中心。我使用laravel作为后端,vuejs作为前端。它们在不同的端口上独立运行。(使用laravel api)

  • Laravel在8000上运行
  • Vue在8082上运行

我允许用户使用JWT Auth进行身份验证。

我正在尝试使用laravel echo服务器制作一个实时数据传输应用程序,并使用公共通道传输数据,效果非常好。

现在,我需要使用私有通道将数据广播给经过身份验证的用户,而这正是我无法弄清楚如何使其工作的地方,我遇到了如下错误

NuG9yhe46E3N9Q6zAAAA could not be authenticated to private-some-p
rivate-channel

Client can not be authenticated, got HTTP status 403

这是laravel echo服务器。json文件

{
    "authHost": "http://localhost:8000",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "mprimeapp",
            "key": "d8f6639653d0c4f31efa56d27f6ab502"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "127.0.0.1"
        },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": "localhost",
    "port": "8890",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "apiOriginAllow": {
        "allowCors": true,
        "allowOrigin": ["http://localhost:8000", "http://localhost:8082"],
        "allowMethods": "GET, POST",
        "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
    }
}

我使用的是同样在运行的redis而不是sqlite数据库。

我的主菜。js文件vue应用程序

const tokenData = JSON.parse(window.localStorage.getItem('authUser'))
if (tokenData !== null) {

  window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://localhost:8890',
    auth: {
      headers: {
        'Authorization': 'Bearer ' + tokenData.token
      }
    }
  })
}

window.Echo.private('some-private-channel')
  .listen('SomeEvent', (e) => {
    console.log(e)
  })

以下是我想问的一些问题。

  1. laravel echo服务器中的authEndpoint。json文件,它是如何工作的?我是否必须在api中设置一个endpoint。用于验证用户身份的php文件
  2. laravel echo服务器中的客户端阵列。json文件中的数据有什么用途

在Laravel应用程序内部配置/app.php

我未注释这一行App\Providers\BroadcastServiceProvider::class

在广播服务提供商。php

 public function boot()
    {
        Broadcast::routes([ 'middleware' => [ 'auth:jwt.auth' ] ] ]);
        require base_path('routes/channels.php');
    }

更新

上面的功能好像有问题。更具体的东西['中间件'=

更改中间件数组后出现此错误

[15:58:13] - vAKK8BO7vs2TZy4SAAAA could not be authenticated to private-some-private-channel
{
    "message": "Auth guard [jwt.auth] is not defined.",
    "exception": "InvalidArgumentException",
    "file": "C:\\xampp\\htdocs\\mipm-l\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\AuthManag
er.php",
.....
.....
.....

共有1个答案

宰父德馨
2023-03-14

您是否安装并配置了JWT Auth软件包https://github.com/tymondesigns/jwt-auth ? (很抱歉,您没有提到)还要确保您的内核中有以下几行代码。php

   protected $routeMiddleware = [
    ...
    'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
    'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,
    ...
    ];
 类似资料:
  • 我能够使用HTTPS设置在本地环境上运行laravel echo服务器。但是,我的生产服务器(基于Forge)似乎存在一个问题: 我能够通过HTTPS在本地测试私有通道,它工作得很好,所以看起来不存在配置问题。 我应该提到的是,我使用的是LaravelPassport,导致此错误的请求被抛出到常规身份验证中间件之外的页面上。 为了确保它不是我的身份验证方法,我让它在我的通道配置中返回“true”:

  • 我已经安装了Laravel回声服务器和Laravel回声客户端。 以下是laravel echo服务器。json配置。 以下脚本侦听通道事件。它可以通过很好地构建。 尝试侦听命令上的任何事件时。它不断抛出。 注: 我在laravel echo服务和谷歌上都没有发现任何有用的东西。 任何帮助将不胜感激。 拉威尔V5。4. 谢谢

  • 我使用获得了和应用程序,我正在尝试通过套接字将前端连接到后端。 我已经通过方法,但它不会订阅 到目前为止,我得到的是: 页面加载后,我调用: 我通过 }); 然后我通过

  • 我正在尝试建立一个实时通知系统。我使用Laravel通知和laravel-echo-server.当我在终端laravel-echo-server start中使用start命令监听通知时,在私有信道中发生错误: ⚠ [4:36:43 PM]-H12aWYBsF5UdR5NYAAAH无法通过私人应用的身份验证。领域使用者使用者1. 客户端无法进行身份验证,已获取HTTP状态404 密码 //频道。

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务