【问题标题】:Get token for OAuth2 in Laravel在 Laravel 中获取 OAuth2 的令牌
【发布时间】:2017-10-22 12:49:11
【问题描述】:

因此,在我是客户端的 OAuth2 情况下,我需要获取主机发送到我的站点的授权代码。当主机发回授权码时,从 URL 中剥离代码然后发回以检索令牌和密钥的正确方法是什么?

我已尝试使用下面的代码剥离 htaccess 中的代码并将其存储为环境变量,但这并没有正确存储环境变量。

htaccess

RewriteCond %{QUERY_STRING} ^code=(.*)$
RewriteRule ^ - [E=MY_AUTH:%1]
RewriteCond %{QUERY_STRING} ^code=(.*)$
RewriteRule ^(.*) https://www.example.com/cadWithAuth? [L]

路由器

Route::get('/cadWithAuth', 'FileController@cadWithAuth')->name('files.cadWithAuth');

控制器

public function cadWithAuth( )
{
    $authCode = getenv('MY_AUTH');
    $authID = getenv('OAUTH_CLIENT_ID');
    $authSecret = getenv('OAUTH_CLIENT_SECRET');
    $client = new Client(); //GuzzleHttp\Client
    $result = $client->post('https://oauth.hostsite.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'authorization_code',
            'code' => $authCode,
            'client id' => $authID,
            'client_secret' => $authSecret
        ]
    ]);

    return response()->json($result);
}

【问题讨论】:

    标签: php .htaccess oauth oauth-2.0


    【解决方案1】:

    我建议您查看现有的库,也就是说,如果您想知道其他开发人员认为实现事物的正确方法是什么。

    至于设置环境变量来捕获令牌/代码,我认为是原创的。我只是认为(所以这是我的观点)将功能组合在一起并尽可能消除魔法更容易,更合乎逻辑。

    所以我不会使用环境变量,因为在一个月左右的时间里我不会轻易记住我设置该变量的位置。因为您可以在应用程序的任何地方访问这些环境变量。

    同样的论点也适用于我提供的解决方案,即使用魔法 $_GET["code"] 来检索您的代码。

    TLDR;如果不需要,请不要重新发明轮子,Oauth2 客户端可用,因此请使用它们。 (大多数甚至都记录在案并带有自己的测试 \o/ 所以你不必编写这些)

    【讨论】:

    • 我很欣赏评论,我确实看过 guzzle。但是,我发现文档和解释是不可接受的——我觉得这对于 php 和 laravel 来说是正常的。如果我设法让它工作,它对我来说就像一个黑匣子,我永远不知道到底发生了什么。
    • 我会给你一个很好的例子。在 guzzle 自述文件中,有一个需要用户名和密码的配置变量。通常,在 OAuth2 中,用户被路由到主机的登录名,而客户端不会看到该名称和密码。那么,为什么会出现在这里?也没有说明授权码和让用户登录主机、获取和授权码、获取令牌或其他任何内容的过程。自述文件一开始就好像用户只需要一个令牌。
    • 稍后在自述文件中,他们解释说您可以使用这些对象来检索和存储令牌
    • 配置中的用户名和密码,这些是你的 Oauth2 客户端用户名和密钥,用于连接提供者
    猜你喜欢
    • 1970-01-01
    • 2013-07-29
    • 2016-10-13
    • 2017-04-04
    • 2012-06-29
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多