如何在节点/套接字应用程序中验证 laravel 护照 API 令牌?
Posted
技术标签:
【中文标题】如何在节点/套接字应用程序中验证 laravel 护照 API 令牌?【英文标题】:How to verify laravel passport api token in node / socket application? 【发布时间】:2018-10-26 02:36:09 【问题描述】:我的问题是关于 laravel 应用程序中的 OAuth 护照令牌,它也使用套接字/节点快速服务器。
我需要在套接字服务器上实现我的身份验证机制。类似这篇文章的东西:https://m.dotdev.co/authenticate-laravel-5-user-account-in-nodejs-socket-io-using-json-web-tokens-jwt-f74009d612f8。
我已经用我自己的令牌构建了这个机制。但我更愿意使用为我的 Laravel API 生成的令牌。
我的意思是这个令牌是如何构建的?有哪些用户字段以及需要哪些密钥来检查令牌在节点服务器端是否有效?这可能吗?
【问题讨论】:
有什么解决办法吗? @RameezRami 检查答案。 【参考方案1】:我自己的解决方案是在 laravel 中为我的节点应用程序创建一个端点。
端点实际上负责从 Passport 验证我的 OAuth 令牌。在简单的例子中就是这样。
Route::get('/user', function(Request $request)
return Auth::user()->id;
)->middleware('auth:api');
在客户端应用程序连接到套接字服务器后,我必须发送我的令牌和 userId,然后调用 laravel 端点以通过 userId 验证我的令牌。当我的用户和令牌正常时,我授予收听频道的权限。
【讨论】:
这将完成这项工作,但对于我正在处理的复杂且大型应用程序来说,它似乎不是一个优雅的解决方案。可能不适将我的 laravel 代码重写为 NodeJS。由于 laravel 和节点连接到同一个数据库,如果我提供 APP_KEY 或其他东西,有没有办法可以使用节点本身中的 Laravel 表来验证令牌?【参考方案2】:不要创建任何代理 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-----`,
);
当然,您可以复制文件并从文件中读取,而不是传递原始字符串。
【讨论】:
以上是关于如何在节点/套接字应用程序中验证 laravel 护照 API 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何在移动应用程序的 Web 服务中使用 Laravel 5.4 验证器
在以下场景中,如何确保用户在 Laravel 中发布文章之前经过身份验证?