如何在节点/套接字应用程序中验证 laravel 护照 api 令牌?

How to verify laravel passport api token in node / socket application?

我的问题是关于 laravel 应用程序中的 OAuth 护照令牌,该应用程序也在使用套接字/节点快速服务器。

我需要在套接字服务器上实施我的身份验证机制。类似于这篇文章:https://m.dotdev.co/authenticate-laravel-5-user-account-in-nodejs-socket-io-using-json-web-tokens-jwt-f74009d612f8

我已经在用我自己的令牌构建这个机制。但我更愿意使用为我的 Laravel API 生成的令牌。

我的意思是这个令牌是如何构建的?那里有哪些用户字段以及需要哪些密钥来检查令牌在节点服务器端是否有效?这可能吗?

我自己的解决方案是在 laravel 中为我的节点应用程序创建一个端点。

端点实际上负责从 Passport 获取我的 OAuth 令牌。在简单的例子中就是这样。

Route::get('/user', function(Request $request) {
    return Auth::user()->id;
})->middleware('auth:api');

在通过客户端应用程序连接到套接字服务器之后,我必须发送我的令牌和 userId,然后调用 laravel 端点以通过 userId 验证我的令牌。当我的用户和令牌正常时,我授予收听频道的权限。

不要创建任何代理 api 回到 laravel 应用程序。

这是我的解决方案:

cat laravel_app/storage/oauth-public.key

节点

export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor() {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      ignoreExpiration: false,
      secretOrKey: `-----BEGIN PUBLIC KEY-----
...............................
The content from: laravel_app/storage/oauth-public.key
...............................
-----END PUBLIC KEY-----`,
    });
  }
}

当然,您可以复制文件并从文件中读取,而不是传递原始字符串。