如何在同一个 laravel 应用程序上通过 laravel 护照安全地使用 axios

Posted

技术标签:

【中文标题】如何在同一个 laravel 应用程序上通过 laravel 护照安全地使用 axios【英文标题】:How to use axios securely with laravel passport on the same laravel app 【发布时间】:2020-03-28 04:17:40 【问题描述】:

我有一个准备好所有必需 API 的 Laravel 后端,一个 android 应用程序正在使用它们,现在我想要一个带有 vuejs 的异步页面,因为我必须使用 API 我必须使用 Axios。但是因为我安装了护照,所以我必须在js中暴露用户的敏感数据,

由于js是客户端语言,只要对web开发有一点了解,就可以查看页面源代码,获取当前认证用户的邮件地址和密码。更重要的是,客户的秘密也被暴露了。在这种情况下我该怎么办?

有解决办法吗?

【问题讨论】:

您是否将页面发送给不是当前已通过身份验证的用户?他们是否可以看到自己的电子邮件地址是否重要?还是他们必须发送的令牌才能继续显示他们是谁? @Quentin 不,只有经过身份验证的用户才能访问该页面。要回答您的第二个问题,不,没关系,但我不希望我的网络应用程序存在任何漏洞。 我的观点是,向人们提供他们已经拥有的信息不是漏洞! @Quentin 一个人在电脑上登录,其他人不能只查看页面源,为什么每次都假设是预期用户访问电脑? 如果问题是用户登录然后让他们的计算机无人看管,那么您需要考虑通过超时来保护事情,而不是拒绝向用户提供他们已经拥有的信息。 【参考方案1】:

您可以构建一个中间件将客户端详细信息注入您的请求:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\DB;

class InjectClientIdAndSecret

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    
        $client = DB::table('oauth_clients')
            ->where('password_client', 1)
            ->first();

        $request->json()->add([
            'client_id' => $client->id,
            'client_secret' => $client->secret,
            'grant_type' => 'password'
        ]);

        return $next($request);
    


【讨论】:

会试试这个。感谢您的回答。

以上是关于如何在同一个 laravel 应用程序上通过 laravel 护照安全地使用 axios的主要内容,如果未能解决你的问题,请参考以下文章