当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.3 Passport oauth-单客户端多址令牌-Alexa

云宝
2023-03-14

我是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来设置它(我计划构建一个网络平台,所以我不会纯粹为了oAuth而使用Laravel)-https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/13

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

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

问题是,目前只有一个用户,我。在Alexa应用程序中,您只能配置一个客户端ID

查看oAuth表,似乎访问令牌(不再有效:)链接到一个用户标识:

-----------------------------------------------------------------------------------------------------------------------------------------------------id |用户id |客户id |名称|范围|已撤销|创建|更新|到期|-------------------------------------------------------------------------------------------------------------------------b96dbbbe1f52386bc098dcc106309504a1e546ec05d2a5cf8d37b7460e4ba84ec95e7ff2c0a2d037 | 1 | 9 | NULL |[] | 0 | 2017-01-16 08:28:18 | 2017-01-16 08:28:18 | 2018-01-16 08:28:18 | ---------------------------------------------------------------------------------- --------- ----------- ------ -------- --------- --------------------- --------------------- ---------------------

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

我需要找到一种方法,这样:

1-用户可以通过Alexa应用程序使用其凭据登录my Laravel应用程序(Alexa将状态、客户端id、响应类型、范围和重定向uri作为查询字符串传递)

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

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

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

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

我希望上面的话有道理,因为我真的很难用语言表达出来。完全有可能我对oAuth的理解也混乱了。

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

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

共有1个答案

白刚洁
2023-03-14

如果您正在为第一方应用程序使用passport,则可以使用密码授予令牌。

首先创建一个密码客户端

php artisan passport:client --password

然后以参数形式传递客户端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);

然后它将返回一个令牌,并使用它传递给标题中的授权承载您的令牌。

 类似资料:
  • 我正在开发一个angularjs网络应用。 要访问服务器端api,我需要添加一个id_token头,并通过使用接收id_token。 问题的关键是——id_token有一个过期日期。在访问服务器应用编程接口之前,我需要确保id_token还没有过期,但是如果是,显而易见的选择是刷新它。 有没有办法刷新id_令牌? 我知道我可以将访问类型更改为脱机,并接收刷新令牌,但请求脱机访问似乎很奇怪,而在我的

  • 程序包nath.prem.com.premgcmproject; //如果令牌被更改,则再次注册设备@override public void onTokenRefresh(){Intent Intent=new Intent(this,GCMRegistrationIntentService.class);startService(Intent);}} 在客户端获取GCM令牌时出错 致命异常:I

  • 我在应用程序中使用JWT实现OAuth 2.0,在决定将什么设置为我的aud声明时遇到了困难。用户将通过我的身份验证服务器“登录”到我的客户端,以访问我的API(资源)服务器。我希望我的令牌只对特定客户端和特定API有效。 从我的客户端登录时,我在请求中不包括它的客户端id,但在我发现的大多数实现中,aud设置为该客户端id。我倾向于在我的登录请求中包含一个customer(客户)audience

  • 引用的员额: 为什么OAuth v2既有访问令牌又有刷新令牌? 刷新令牌有什么意义?

  • 在angular文档中,提到angular将在post请求的头中自动发送cookie的值。文档链接 但它没有为我发送标题。这是我的密码 Nodejs用于设置cookie的代码 我在app.module.ts中使用了http客户端 **以上代码仅用于调试目的。我没有set-csrf终结点。 但是当我发送帖子请求时,它不会发送任何标题。我不能调试。 我也在angular的github存储库中添加了这个

  • 主要内容:Redis IO多路复用,客户端最大连接数,常用命令,命令应用应用Redis 提供了一些操作客户端(client)的命令,比如查询所有已连接到服务器的客户端数量,控制客户端的连接状态(关闭或者挂起)等。通过客户命令我们可以轻松的实现对客户端的管理、控制。 Redis 服务器通过监听 TCP 端口的方式来接受客户端的连接。当一个连接建立后,Redis 会自动执行以下过程: 首先客户端 socket 被设置为非阻塞模式,这是因为 Redis 在网络事件处理上采用了非