【问题标题】:Laravel 5.3 Passport oauth - Single client multiple access token - AlexaLaravel 5.3 Passport oauth - 单客户端多访问令牌 - Alexa
【发布时间】:2017-05-31 01:33:02
【问题描述】:

我是 oAuth 的新手,但我需要为 Alexa 家庭套件技能集成它。

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-user-with-a-user-in-your-system

我正在为此苦苦挣扎,但我知道我需要使用授权码授予。

在谷歌搜索之后,我想我会尝试使用 Laravel Passport 进行设置(我计划构建一个 Web 平台,所以我不将 Laravel 纯粹用于 oAuth)-https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/13

我从未使用过 Laravel(PHP 新手),但我花了几个小时阅读 Laracast 指南,所以我有一个基本的了解。

我能够使用 Laravel Passport 设置一个 oAuth 服务器,创建一个客户端,使用我在 Alexa 应用程序上配置的客户端 ID、Secret 和 Auth URL,并使 Alexa 帐户链接正常工作。太好了。

问题是,目前只有一个用户,我。在 Alexa 应用程序中,您只能配置一个客户端 ID 和密钥,而我链接用户的唯一方法是通过 Alexa 在每个操作/请求中传递的访问令牌。

查看 oAuth 表,似乎访问令牌(不再有效:​​))链接到 user_id:

+--------------------------------------------- ------------------------------------+---------+--- --------+------+--------+---------+--------------- ------+----------+---------- + |编号 |用户 ID |客户 ID |姓名 |范围 |撤销| created_at |更新时间 |过期_at | +-------------------------------------------------- ---------------------------------+---------+------ -----+------+--------+---------+------ ---+----------+----------+ | b96dbbbe1f52386bc098dcc106309504a1e546ec05d2a5cf8d37b7460e4ba84ec95e7ff2c0a2d037 | 1 | 9 |空 | [] | 0 | 2017-01-16 08:28:18 | 2017-01-16 08:28:18 | 2018-01-16 08:28:18 | +-------------------------------------------------- ---------------------------------+---------+------ -----+------+--------+---------+------ ---+----------------------+---------+

在 Laravel 中注册/创建用户很简单,但目前每个用户只能创建自己的客户端,这在此处不起作用,因为 Alexa 被配置为使用单个客户端。

我需要找到一种方法:

1 - 用户可以使用他们的凭据通过 Alexa 应用程序登录我的 Laravel 应用程序(Alexa 将传递 state、client_id、response_type、scope 和 redirect_uri 作为查询字符串)

2 - 如果用户通过身份验证,我的 Laravel 应用程序将生成一个授权码并将其传递回 Alexa,包括状态

3 - Alexa 使用该代码然后请求访问令牌和刷新令牌

4 - 生成访问令牌时,它会链接到该用户(客户)的 user_id,而不是创建客户端(我)的 user_id

5 - 刷新访问令牌后,再次应用第 4 步。

我希望以上内容是有道理的,因为我真的很难用语言表达。完全有可能我对oAuth的理解也搞砸了。

如果我能完成上述步骤,我相信我可以轻松创建一个 API/方法,让我可以使用 SQL 查询确定访问令牌分配给哪个用户。

我还应该能够练习如何显示 oauth vue 组件,以便只有管理员用户才能看到/使用它们来创建客户端。

【问题讨论】:

    标签: laravel oauth-2.0 access-token alexa-skills-kit laravel-passport


    【解决方案1】:

    如果您将护照用于第一方应用,您可以使用Password Grant Tokens

    先创建密码客户端

    php artisan passport:client --password
    

    然后在 form_params 和用户凭据中传递客户端 ID 和客户端密码。

    $http = new GuzzleHttp\Client;
    
    $response = $http->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => 4,
            'client_secret' => 'asefwwsgaqwsfwghhw3eqrfdhe',
            'username' => 'test@email.com',
            'password' => '123456',
            'scope' => '',
        ],
    ]);
    
    return json_decode((string) $response->getBody(), true);
    

    然后它会返回一个token,并用它来传递给header中的Authorization Bearer your-token

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2018-11-22
      • 2021-01-24
      • 2017-10-15
      • 2021-09-12
      • 2019-01-25
      • 2019-05-24
      相关资源
      最近更新 更多