1

我是 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 进行设置(我计划构建一个网络平台,所以我不将 Laravel 纯粹用于 oAuth) - https://laracasts.com/series/whats-新的 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 组件,以便只有管理员用户能够查看/使用它们来创建客户端。

4

1 回答 1

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);

然后它将返回一个令牌并使用它传递给Authorization Bearer your-token标头中的。

于 2017-03-14T05:04:47.833 回答