Laravel Socialite 提供商的动态服务器 url?

问题描述 投票:0回答:1

我正在尝试为基于 OIDC/OAuth2.0 的新 Matrix Auth 协议添加提供程序,该协议在 https://areweoidcyet.com/

中有概述

这里的主要问题是,由于 Matrix 是可自托管和联合的,因此没有中央用户提供商,而是无穷无尽的。也不可能有一个配置定义的服务器,因为可能有来自不同服务器的用户使用单个服务。当有人尝试使用此登录名来查询正确的内容并将正确的 URL 输入到提供程序功能时,我希望有一个家庭服务器输入字段。有关其工作原理的示例位于 https://areweoidcyet.com/client-implementation-guide/

本质上,用户输入他们的 HS,客户端(这里是 laravel 应用程序)然后拉入

well known
auth_issuer
数据来找出正确的路径。

这对我来说很清楚。然而,我不清楚如何以非活泼的方式从 UI 获取主服务器 URL 到我的提供商。这可能吗?对于 UI,我使用 Intertia 而不是 Blade。但如果需要的话,我也可以将刀片知识转移到我的设置中。

请随时询问有关此问题的更多问题,以便我得到好的答案。


到目前为止,我已经查看了各种其他答案以及如何创建提供程序,但他们似乎都期望身份验证提供程序的静态 url。这在使用中央身份验证的正常 OAuth2 设置中是有意义的。然而,这在我的用例中并不是给定的。

我还看到了使用配置值的建议,但这很有趣。其他人建议使用数据库模型,但我担心这对于让未经身份验证的用户写入数据库来说不是很安全。

php laravel matrix inertiajs laravel-socialite
1个回答
0
投票

由于你无法自由地向Socialite Provider传递值,所以你别无选择,只能使用config。

// Socialite Provider

    /**
     * {@inheritdoc}
     */
    protected function getAuthUrl($state): string
    {
        $url = config('services.matrix.url').'/authorize';

        return $this->buildAuthUrlFromBase($url, $state);
    }

    /**
     * {@inheritdoc}
     */
    protected function getTokenUrl(): string
    {
        return config('services.matrix.url').'/oauth2/token';
    }
// Controller

    public function redirect(Request $request)
    {
        // Get the necessary information.
        // ...

        config(['services.matrix.url' => $url]);
        config(['services.matrix.client_id' => $client_id]);
        config(['services.matrix.client_secret' => $client_secret]);

        session(['matrix_url' => $url]);
        //...

        return Socialite::driver('matrix')->redirect();
    }

    public function callback(Request $request)
    {
        $url = session('matrix_url');
        // ...

        config(['services.matrix.url' => $url]);
        config(['services.matrix.client_id' => $client_id]);
        config(['services.matrix.client_secret' => $client_secret]);

        $user = Socialite::driver('matrix')->user();

        // ...
    }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.