标签: laravel-passport

如何在 Laravel 应用程序中获取客户端 ID?

我已经设置了一个带有客户端身份验证的 Laravel 应用程序。我将我的客户端 ID 和客户端密码发送给它,它给了我一个令牌。我可以登录我的 Laravel 应用程序,但我不知道如何获取已授权客户端的 ID。

我已经看到了用于auth()->user()->Token()->getAttribute('client_id')获取客户端 ID 的提示,但是由于我只使用客户端,因此没有用户,并且我收到有关尝试在空对象上调用 Token() 的错误。Auth::id()也一无所获。我用 获取了标头中的令牌Request::header('Authorization'),但它与数据库中的任何内容都不匹配。

laravel laravel-passport

5
推荐指数
1
解决办法
3502
查看次数

刷新令牌被 Laravel Passport 中的访问令牌撤销

我正在使用laravel/passport password_grant进行身份验证。整个生成access_tokenrefresh_token过程工作正常。现在我正在尝试使用 Laravel 护照令牌事件来撤销旧令牌。

我参考了这篇文章的过程 - https://laracasts.com/discuss/channels/laravel/laravel-passport-revoke-and-prune-event-listener-is-not-doing-anything

这有效......但是当access token使用先前提供的刷新时refresh tokenaccess token正在创建一个新的并创建一个新的refresh token存在。最终,在撤销 old 时access token, old, not expiredrefresh token也被撤销。

但我认为,refresh token只有在它到期时才必须撤销。

而且当我EventListenersApp\Providers\EventServiceProvider $listen array 中删除时,撤销机制仍然有效。

这就像拔掉插头灯泡仍然亮着一样。

如何解决这个问题?还是我在某个地方的概念有误?

authentication access-token laravel refresh-token laravel-passport

5
推荐指数
1
解决办法
3262
查看次数

通过 cookie 进行 Laravel Passport 身份验证 - 注销时过期?

在我的项目,我整合Laravel护照才能使用我的API在我的应用程序,如所描述这里

我的问题是关于laravel_tokencookie的过期时间。在这里可以看到,我的应用程序发回的 cookie 被检查以验证它没有过期。这个到期时间似乎是由我的会话生命周期定义的 - 请参阅此处

这似乎意味着 laravel_token cookie 将在我的应用程序的用户注销后仍然有效,只要会话时间没有过期(实际上,如果我删除服务器上的所有会话并且注销我的用户,使用 cookie 的 API 请求仍然成功)。

这是预期的行为吗?如果用户注销,是否有办法自动使 cookie 过期?(我知道 cookie 已从用户的系统中删除,但我是从 cookie 被劫持或被盗的理论可能性来看它的,然后只要会话生命周期没有过期就可以使用)。

laravel laravel-5 laravel-passport

5
推荐指数
1
解决办法
976
查看次数

Laravel Broadcast - 结合多个中间件(web、auth:api)

我正在使用 Laravel Event Broadcast 和 Pusher 在我的 API 和 Web 上利用 websocket。如果我单独尝试它们,两者都可以正常工作。我的意思是:

Broadcast::routes(['middleware' => 'web']); // this works for my Laravel website

Broadcast::routes(['middleware' => 'auth:api']); // this works for my api
Run Code Online (Sandbox Code Playgroud)

但是,如果我想像这样同时使用两者:

Broadcast::routes(['middleware' => ['auth:api', 'web']]); // doesn't work
Run Code Online (Sandbox Code Playgroud)

...它同时崩溃,我怀疑它假设我正在尝试为两个auth:api && web中间件启用。

有没有办法为此使用 OR 类型的语句(auth::api || 'web')?如果我想同时使用两者,并且如果它通过一个中间件,它会绕过中间件怎么办。

请注意,我的 api 使用的是 Laravel Passport。


或者有没有办法为两者结合并创建一个混合中间件(这将基本上检查 api 或 web)?所以我可以使用这样的东西:

Broadcast::routes(['middleware' => 'broadcast']); // or auth:broadcast
Run Code Online (Sandbox Code Playgroud)

更新:

据我了解,如果我创建一个名为 的新中间件broadcast,我可以这样做:

class BroadcastMiddleware() {

  public function handle() {
    $web = …
Run Code Online (Sandbox Code Playgroud)

middleware laravel laravel-events laravel-passport laravel-5.5

5
推荐指数
1
解决办法
6681
查看次数

混淆Laravel护照API安全性的工作方式

客户端将用户名和密码发送到服务器。

然后,服务器检查此用户是否已通过身份验证。

如果是,则服务器返回客户端的访问令牌。

然后用户可以使用此访问令牌访问受保护的资源...

这样做的好处是,我们不会通过API调用发送用户信息,并且访问令牌不会持续很长时间,因此黑客将无法发现用户身份验证信息(用户名和密码),以及发现,访问令牌的持续时间不足以对其执行任何操作。

这就是我了解Laravel护照API安全性的方式。

这里令人困惑的是,在第一次API调用时,用户必须发送用户名和密码,因此黑客仍然有很大的机会找出用户信息!!!

我知道我的理解有问题,这就是为什么我会感到困惑,任何解释都将不胜感激。

security api laravel laravel-passport

5
推荐指数
1
解决办法
1275
查看次数

Laravel Passport Set 会话

当我尝试通过 laravel 护照设置会话时出现以下错误

"message": "会话存储未根据请求设置。", "exception": "RuntimeException",

laravel laravel-passport

5
推荐指数
2
解决办法
5621
查看次数

Laravel 结合了 Passport 身份验证和普通身份验证

如何结合 Passport 身份验证和普通 Laravel 身份验证?

我希望用户登录 web-middleware 和 api-middleware 的页面。登录路由在 api-middleware 中。目前我已经设置了 Passport 身份验证,它适用于所有 api-middleware 路由。如何让用户也登录到网络中间件?

编辑 #1

我在做什么:

登录代码

$http = new \GuzzleHttp\Client();

    try {
        $response = $http->post(config('services.passport.login_endpoint'), [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('services.passport.client_id'),
                'client_secret' => config('services.passport.client_secret'),
                'username' => $args['email'],
                'password' => $args['password']
            ]
        ]);

        $user = User::where('email', $args['email'])->first();

        Auth::guard('web')->login($user);
        return [
            "token" => $response->getBody()->getContents(),
            "user" => $user
        ];

    } // ...
Run Code Online (Sandbox Code Playgroud)

在某个网络中间件路线中的某处

return auth()->check() ? "logged in" : "not logged in";
Run Code Online (Sandbox Code Playgroud)

返回“未登录”

laravel laravel-passport

5
推荐指数
1
解决办法
2598
查看次数

如何在 Laravel 中为列表或数组定义策略?

我有以下政策来确定用户是否能够查看合同。

public function view(User $user, Contract $contract)
    {
        if ($user->user_type->id == 2) { // If user is a vecino
            if ($user->id == $contract->customer_id) {
                return true;
            }
        } else if ($user->user_type->is_admin == true) { // If user is an admin
            return true;
        }

        return false;
    }
Run Code Online (Sandbox Code Playgroud)

然后检查授权

$this->authorize('view', $contract);
Run Code Online (Sandbox Code Playgroud)

如何检查列表/数组/集合的授权?就像我通过以下方式获得合同清单一样Contract::all()

我还没有找到任何方法来做到这一点。我可以做一个循环并为每次迭代调用 $this->authorize 来检查授权,但这可能会影响性能。

有没有更好的方法来做到这一点?

permissions authorization roles laravel laravel-passport

5
推荐指数
1
解决办法
1028
查看次数

Laravel Passport:仅使用用户名登录,无需密码

在我的项目中,我将通过使用短信发送确认码来验证用户电话号码。确认后,我必须向我的 Laravel 应用程序发送登录请求。在Laravel Passport文档中有登录用户的示例请求:

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],
]);
Run Code Online (Sandbox Code Playgroud)

我如何在这里设置为username用户phone并删除password

如果password是 Laravel Passport 中的必填字段,那么我可以从客户端发送任何密码并passwordattempt用户凭据之前发送请求用户。但是我必须在哪里输入密码?

我已经厌倦了改变LoginController但没有工作。

登录控制器

protected function validateLogin(Request $request)
{
    $request->validate([
        $this->username() => 'required|string'
    ]);
}

protected function credentials(Request $request)
{
    $params = [
        'password' => '12345678',
    ];
    $request->request->add($params);
    return $request->only($this->username(), …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-passport

5
推荐指数
1
解决办法
4031
查看次数

Laravel Passport + Laravel Socialite + Flutter

我需要你的帮助。

我用 Laravel 制作了一个 API,用 FLutter 制作了一个 APP。

现在我想让谷歌登录。

在浏览器或休息客户端,如 Insomnia、Postman 或类似的工作正常。这是因为系统向我显示了一个谷歌页面,我必须写下我想登录的电子邮件或谷歌用户,然后显示另一个页面来写密码。最后,所有返回到 APIS 回调端点,显示数据(令牌等)。

但是,当我从我的 flutter 应用程序中执行此操作时,我需要指示用户帐户的第一个 google 页面会像字符串响应一样发送(此字符串响应是 HTML。我认为是我们选择或帐户上的 google 页面中的 HTML) .

如何显示此页面并获得回复?

注意:flutter_inappbrowser这样的 flutter 插件对我来说没有用,因为这个插件需要一个 URL 并显示它。当我使用flutter 的 http.get时,我得到了字符串上的 HTML 。

laravel laravel-socialite flutter laravel-passport

5
推荐指数
0
解决办法
464
查看次数